Liny_@NotePad

沉迷ACG中

C与C++风格输入在文件结束后继续读的不同

YOYO posted @ 2009年5月15日 21:41 in 【C/C++】 with tags io , 2419 阅读

在出的一组数据中,有一个Case少打了一行,结果我用cin过了,用gets的娃倒是不能通过。

是否是因为cin会清空而gets在读到文件尾时未改变指针的值就返回了呢? 

下面做一个简单的测试,将一行文本

test 123

保存为1.in,编写测试的C++程式:

  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4.  
  5. int main(){
  6.         char str[1000];
  7.  
  8.         freopen("1.in","r",stdin);
  9.  
  10.         //      获得第一行
  11.         gets(str);
  12.         printf("%3d - %s\n", 0, str);
  13.  
  14.         //      之后已经读完
  15.         scanf("%s",str);
  16.         printf("%s - %s\n", "scanf", str);
  17.  
  18.         gets(str);
  19.         printf("%s - %s\n", "gets", str);
  20.  
  21.         printf("%s - %c\n", "getchar", getchar());
  22.  
  23.         scanf("%s",str);
  24.         printf("%s - %s\n", "scanf", str);
  25.  
  26.         gets(str);
  27.         printf("%s - %s\n", "gets", str);
  28.  
  29.         cin>>str;
  30.         printf("%s - %s\n", "cin", str);
  31.  
  32.         scanf("%s",str);
  33.         printf("%s - %s\n", "scanf", str);
  34.  
  35.         gets(str);
  36.         printf("%s - %s\n", "gets", str);
  37.  
  38.         return 0;
  39. }

 执行结果如下:

  0 - test 123
scanf - test 123
gets - test 123
getchar - 
scanf - test 123
gets - test 123
cin -
scanf -
gets -

可以看出,scanf和gets在读到文件尾的时候都是保持上一次不变,而cin则会清空。

不知道在哪里可以看到这几种输入的具体实现= =?


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter