C与C++风格输入在文件结束后继续读的不同
在出的一组数据中,有一个Case少打了一行,结果我用cin过了,用gets的娃倒是不能通过。
是否是因为cin会清空而gets在读到文件尾时未改变指针的值就返回了呢?
下面做一个简单的测试,将一行文本
test 123
保存为1.in,编写测试的C++程式:
-
#include<iostream>
-
#include<fstream>
-
using namespace std;
-
-
int main(){
-
char str[1000];
-
-
freopen("1.in","r",stdin);
-
-
// 获得第一行
-
gets(str);
-
printf("%3d - %s\n", 0, str);
-
-
// 之后已经读完
-
scanf("%s",str);
-
printf("%s - %s\n", "scanf", str);
-
-
gets(str);
-
printf("%s - %s\n", "gets", str);
-
-
printf("%s - %c\n", "getchar", getchar());
-
-
scanf("%s",str);
-
printf("%s - %s\n", "scanf", str);
-
-
gets(str);
-
printf("%s - %s\n", "gets", str);
-
-
cin>>str;
-
printf("%s - %s\n", "cin", str);
-
-
scanf("%s",str);
-
printf("%s - %s\n", "scanf", str);
-
-
gets(str);
-
printf("%s - %s\n", "gets", str);
-
-
return 0;
-
}
执行结果如下:
0 - test 123
scanf - test 123
gets - test 123
getchar -
scanf - test 123
gets - test 123
cin -
scanf -
gets -
scanf - test 123
gets - test 123
getchar -
scanf - test 123
gets - test 123
cin -
scanf -
gets -
可以看出,scanf和gets在读到文件尾的时候都是保持上一次不变,而cin则会清空。
不知道在哪里可以看到这几种输入的具体实现= =?