用'fgets'同时读取变量

时间:2014-03-16 22:09:21

标签: c++

我无法理解以下代码的工作原理。与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;
    }

}

1 个答案:

答案 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 )并返回。