Scanf 使用 \n。不知道它有什么作用
Scanf using \n. Don't know what does it do
我是编程新手,我不知道发生了什么。这是我的代码:
#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
int c,d;
scanf("%d\n", &c);
cout<<c<<endl;
return 0;
}
我不明白为什么它需要两个输入并打印出第一个。
首先,不要将 C 风格 input/output(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)
需要两个换行符 - 第一个满足格式行的要求,第二个确保输入完成。
scanf
格式字符串中的 \n
表示读取 任意数量的 whitespace.
因此,为了确保执行此操作,它必须继续读取,直到读取到一个非空白字符。
另一个起作用的因素是终端输入默认是行缓冲的;因此在您按 Enter 之前,scanf
无法查看数据。
这样的结果是你需要输入你的数字,再加上一个非空白字符,然后回车,以满足"%d\n"
.
我是编程新手,我不知道发生了什么。这是我的代码:
#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
int c,d;
scanf("%d\n", &c);
cout<<c<<endl;
return 0;
}
我不明白为什么它需要两个输入并打印出第一个。
首先,不要将 C 风格 input/output(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)
需要两个换行符 - 第一个满足格式行的要求,第二个确保输入完成。
scanf
格式字符串中的 \n
表示读取 任意数量的 whitespace.
因此,为了确保执行此操作,它必须继续读取,直到读取到一个非空白字符。
另一个起作用的因素是终端输入默认是行缓冲的;因此在您按 Enter 之前,scanf
无法查看数据。
这样的结果是你需要输入你的数字,再加上一个非空白字符,然后回车,以满足"%d\n"
.