我是编程新手,我无法弄清楚发生了什么。这是我的代码:
#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
int c,d;
scanf("%d\n", &c);
cout<<c<<endl;
return 0;
}
我无法理解为什么它会输入两个输入并打印出第一个输入。
答案 0 :(得分:2)
\n
格式字符串中的scanf
表示读取任意数量的whitespace 。
因此,为了确保执行此操作,它必须继续读取,直到它读取非空格字符。
另一个因素是终端输入默认为行缓冲;因此,在您按Enter键之前,scanf
无法检查数据。
结果是您需要输入您的号码和另一个非空格字符,然后按Enter键以满足"%d\n"
。
答案 1 :(得分:-1)
首先,不要将C风格的输入/输出(sacnf
,printf
等)与C ++风格(cout
,cin
,stc混合使用)。
关于您的问题,问题出在scanf
函数的格式行中。将代码更改为:
#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
int c,d;
scanf("%d", &c);
cout<<c<<endl;
return 0;
}
并看到差异。
"%d\n"
为什么需要第二次输入的最简单解释是:
scanf
使用%d
作为在输入流中查找数字的指令,其他\n
需要等待代码等于换行代码的字符,但scanf
始终停止读取输入流并在读取换行符后停止工作,因此scanf("%d\n", &c)
需要两个换行符 - 第一个用于满足格式行的要求,第二个用于确保输入已完成。