笔者在学习C++的时候碰到一道题目,需要连续输入四个变量,前两个和最后一个都是整数变量,第三个为字符变量。输入变量格式如下
scanf("%d%d%c%d", &a, &b, &t, &sign)
输入的变量为
7 7 @ 0
然而当我编写好代码时(此时用的时格式化输入输出scanf函数),却得不到任何输出结果。经过调试发现在程序执行过程中,程序没有打印相应的字符‘@’,而是不断的在输出空格,加入变量监控后发现变量显示的是空格对应的ASCLL码,原来是字符变量并没有被赋值为字符‘@’而是被赋值成了空格(变量7和字符@之间隔了空格,而当变量a和b都被赋值后,程序默认读取下一个字符型变量将其赋值给t,而此时空格在@之前,所以被优先读取了,也就是把空格字符赋值给了t,导致最后结果没有显示)
通过修改格式化输入输出为流式输入输出
cin >> a >> b >> t >> sign;
运行成功
结论
当需要进行格式输出的时候(比如保存小数点后n位等),则使用scanf和printf输入输出,如果无特殊要求最好使用流式输入输出,也就是cin和cout