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(sacnfprintf 等)与 C++ 风格(coutcin, 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".