cpp'中的printf格式等价物;s库特 我现在是计算机科学专业的学生,今天我收到了一份额外的普通作业,应该在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);

在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);

因为赋值的条件是它应该用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,但社区总是令人惊讶:)谢谢你支持像我一样处于学习曲线上的人!