我无法理解以下代码的工作原理。与gets()不同,fgets()不会丢弃换行符。所以当我运行程序时,为什么总是跳过第二个输入?
谢谢:)
#include <cstdio>
#include <iostream>
using namespace std;
int main(){
int t;
char m[100], n[100];
int dummy;
scanf("%d", &t);
while(t--){
fgets(m, 50, stdin);
fgets(n, 50, stdin);
cout<<m<<n;
}
}
答案 0 :(得分:3)
fgets
被定义为每当找到换行符时就停止阅读,并且它正在按照预期的那样做。
您的代码段问题是scanf
使用“%d”调用,因为格式说明符不会读取读取数字后出现的任何内容。
想象一下我们的输入如下,其中<new-line>
表示换行字符:
123<new-line>
hello world<new-line>
olleh dlrow
scanf
完成后,输入流将包含以下内容
<new-line>
hello world<new-line>
olleh world
请注意,123
之后的换行尚未被读取,这意味着您对fgets
的第一次调用将读取该单个字符(即< em> new-line )并返回。