
(1) good函数
bool good ( ) const;
检查输入流是否良好c fscanf 读取txt,可否继续进行输入。主要检查流的3个状态标志:eofbit, failbit 和badbit
(2) eof函数
bool eof ( ) const;
检查eofbit标志。用于测试是否达到文件末尾(EOF)
(3) fail函数
bool fail ( ) const;
检查failbit和badbit。测试是否出现输入错误。
(4) bad函数
bool bad ( ) const;
检查badbit。检查是否出错。
所以在具体的使用中,可以使用good函数来作为循环的判断条件。
所以,我们总结一下在C/C++中读取一个字符或字符串可以采用的方式。
1. 首先,读取一个字符:
C语言方式:
(1).采用getchar从stdin输入
while((c=getchar())!=EOF)
putchar(c);
(2). 采用fgetc/getc输入
while((c=fgetc(stdin))!=EOF)
fputc(c,stdout);
或
while((c=getc(stdin))!=EOF)
putc(c,stdout);
C++语言方式:
(1).采用重载操作符>>
while(cin>>c)
cout<<c<<endl;
这种形式会跳过所有的空白符,包括空格,换行,制表符
(2). 采用get函数
char c;
while(cin.good())
{
c=cin.get();
if(cin.good())//这儿就是判断是否读入了有效的字符
cout<<c;
}
这儿可以读入任何字符。
或者
char c;
while((c=cin.get())!=-1)
cout<<c;
这儿就是直接判断读到的字符,类似C中的思想。
2. 其次, 读取一行文本:
C语言方式:
(1). 采用gets函数,从stdin输入
char str[256];
while(gets(str)!=NULL)
puts(str);
(2). 使用比较安全的fgets函数
char str[256];
while(fgets(str,256,stdin)!=NULL)
fputs(str,stdout);
(3). gcc中扩展的函数
int read;
int len=0;
char *line=NULL;
while((len=getline(line,maxline))>0)。 while len getline line, maxline 0 if len max max len。while ((read = getline(&line, &len, fp)) 。
printf("%s\n",line);
free(line);
C++语言方式:
(1).采用操作符重载>>
string s;
while(cin>>s)
cout<<s<<endl;
这种方式会以空白(空格,换行,制表)为分隔符,不断的读入字符串。
(2). 采用istream类的成员函数getline
char str[256];
while(cin.good()){
cin.getline(str,256);
cout<<str<<endl;
}
或
char str[256];
while(cin.getline(str,256)){
cout<<str<<endl;
}
(3). 采用全局函数getline
string str;
while(getline(cin,str)){
cout<<str<<endl;
}
(4). 采用get函数
char str[265];
while(cin.good()){
cin.get(str,256);
cin.get();
cout<<str<<endl;
}
总结来看,如果要读取一行的话,
对于C语言,可以采用fgets函数,或者如果使用linux平台的话,可以采用扩展的getline函数。
注意,这两个函数都是要读入最后的换行符的。
对于C++语言,如果使用C字符串的话,就采用cin.getline()函数,如果采用string型字符串的话,就采用全局函数getline(cin,n);
注意c fscanf 读取txt,这两个函数都不读入最后的换行符。
这儿有一个关于getline函数的简单的总结:
这儿有一个关于cin中的getline和get函数的比较:
这儿是对C中输入输出函数的一个简单总结:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-117431-1.html
不动武就惊跑了美帝
只能美国一家在表演