cpp'中的printf格式等价物;s库特 我现在是计算机科学专业的学生,今天我收到了一份额外的普通作业,应该在C++下编写。直到今天我还在学习C语言。这更像是一项盲目的任务
在C语言中,我通常使用:cpp'中的printf格式等价物;s库特 我现在是计算机科学专业的学生,今天我收到了一份额外的普通作业,应该在C++下编写。直到今天我还在学习C语言。这更像是一项盲目的任务,c++,c,io,formatting,iomanip,C++,C,Io,Formatting,Iomanip,在C语言中,我通常使用: printf("\n\n\t%-30s %-7d liters\n\t%-30s %-7d liters\n\t%-30s %-7d km", "Current gasoline in reserve:", db.currentGas, "Total gasoline used:", db.usedGas, "Total travel distance:", db.usedGas);
printf("\n\n\t%-30s %-7d liters\n\t%-30s %-7d liters\n\t%-30s %-7d km",
"Current gasoline in reserve:",
db.currentGas,
"Total gasoline used:",
db.usedGas,
"Total travel distance:",
db.usedGas);
因为赋值的条件是它应该用C++编写,这就是我所尝试的:
cout << setw(30) << "\n\n\tCurrent gasoline in reserve: "
<< setw(7) << db.currentGas << "litres"
<< setw(30) << "\n\tTotal gasoline used: "
<< setw(7) << db.usedGas << "litres"
<< setw(30) << "\n\tTotal travel distance: "
<< setw(7) << db.travelDistance << "km";
printf
中的cout负号进行左对齐
如果在C++中这样做,你需要 确实有区别,比如:
Georgioss-MacBook-Pro:~ gsamaras$ g++ -Wall main.cpp
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out
Current gasoline in reserve: 6litres
Total gasoline used: 5litres
Total travel distance: 4kmGeorgioss-MacBook-Pro:~ gsamaras$ gcc -W
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out
Current gasoline in reserve: 6 liters
Total gasoline used: 5 liters
Total travel distance: 4 kmGeorgioss-MacBook-Pro:~ gsamaras$
cout << "\n\n" << left << setw(30) << "\tCurrent gasoline in reserve: " << left << setw(7) << 6 << "litres\n" << left << setw(30) << "\tTotal gasoline used: " << left << setw(7) << 5 << "litres\n" << left << setw(30) << "\tTotal travel distance: " << left << setw(7) << 4 << "km";
但问题是区别在哪里
setw(30)
相当于%30s
,但是,您使用了-30s
,它将输出左对齐!要获得类似的行为,请使用以下命令:
Georgioss-MacBook-Pro:~ gsamaras$ g++ -Wall main.cpp
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out
Current gasoline in reserve: 6litres
Total gasoline used: 5litres
Total travel distance: 4kmGeorgioss-MacBook-Pro:~ gsamaras$ gcc -W
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out
Current gasoline in reserve: 6 liters
Total gasoline used: 5 liters
Total travel distance: 4 kmGeorgioss-MacBook-Pro:~ gsamaras$
cout << "\n\n" << left << setw(30) << "\tCurrent gasoline in reserve: " << left << setw(7) << 6 << "litres\n" << left << setw(30) << "\tTotal gasoline used: " << left << setw(7) << 5 << "litres\n" << left << setw(30) << "\tTotal travel distance: " << left << setw(7) << 4 << "km";
cout在C++20中,您将能够使用std::format
进行此操作,这非常容易从printf
翻译:
根据gsamaras的回答,这确实是一个真实的答案。但请多解释一点,我们将不胜感激!:)我永远不会理解有人对一个完全正确的问题投反对票,包括对已经尝试过的问题的编码以及对所问问题的具体说明。巨魔可能?实际上,使用PrimTF在C++中也是绝对合法的……不过,你更喜欢#包含
而不是#包含
。我个人经常使用PrimTf(有时(s)Sncf)函数,因为它比C++流更方便。另一方面,如果涉及复杂类或typedef,则后面的方法非常有用,因为您不希望在所有涉及的平台上都是相同的(例如,uint32\t
)。因此,如果赋值只需要C++,那么就可以将调用保留到PrimTf,如果需要明确地使用流,那么您需要更改…@阿空加瓜山:仍然避免Primff()/SCANFER()函数族的良好实践,因为它们允许各种潜在致命错误(由于是可变函数,即没有类型检查)。另外,即使是在C语言中,我也会远离任何scanf()——正确调用scanf()只比使用gets()稍微容易一些……@DevSolar Truth,scanf我通常不使用-更喜欢一次读一整行(fgets),然后再使用sscanf-如果我这样做的话。。。别误会我,我非常欣赏C++流。但有时,好的旧printf系列比流更方便,比较fprintf(stderr,“[…]失败,错误为%d(%s)\n”,errno,strerror(errno))代码>vs.std::cerr@Aconcagua:同意,如果它在那里并经过测试,不要碰它。但是我在新代码中避免了这种构造,谢谢你的详细解释!很抱歉,如果这个问题有点愚蠢,我对C++完全陌生:几年前我和你在同一个水平,当我开始学习UNI的C++时,所以没有愚蠢的问题,我赞成它。不客气。应该是cout@KlitosKyriacou,我正要修改我的答案,但谢谢你!)谢谢大家对我的支持!我在大学的第一天就开始使用StackOverflow,但社区总是令人惊讶:)谢谢你支持像我一样处于学习曲线上的人!