Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从标准输入到C中的EOF,逐字读取_C_Stdin - Fatal编程技术网

从标准输入到C中的EOF,逐字读取

从标准输入到C中的EOF,逐字读取,c,stdin,C,Stdin,我试图在EOF之前读取C中的字符串,但在输入下一个字符之前对每个字符都做出反应。 例如: 用户输入abcd,在每个字符输入之后,我将对每个字符进行一些计算。 我试着用两种不同的方式来处理这个问题: 选项1,使用getchar(): intd; 字符c; 而((d=getchar())!=EOF){ c=(char)d; > } 选项2,使用scanf: char c; while (scanf(" %c",&c) != EOF) { <<< DO SOME C

我试图在EOF之前读取C中的字符串,但在输入下一个字符之前对每个字符都做出反应。 例如: 用户输入
abcd
,在每个字符输入之后,我将对每个字符进行一些计算。 我试着用两种不同的方式来处理这个问题:

选项1,使用getchar():

intd;
字符c;
而((d=getchar())!=EOF){
c=(char)d;
>
}
选项2,使用scanf:

char c;
while (scanf(" %c",&c) != EOF) {
    <<< DO SOME CALCULATIONS ON 'c'>>>
}
charc;
while(scanf(“%c”,&c)!=EOF){
>
}
然而,这两种方法似乎都失败了。似乎getchar()和scanf()会获取所有字符,直到遇到“EOF”,然后才进入while循环

我希望能在这方面得到一些帮助, 谢谢

scanf手册上说:

“如果在第一次成功转换或转换之前到达输入结束,则返回值EOF 匹配失败。如果发生读取错误,也会返回EOF,在这种情况下 流(见ferror(3))已设置,设置了errno表示错误。”

。。在这种情况下,最好使用do..while approch和scanf(如果您希望存储scanf返回以检查错误):

与原始模式下的getchar()相同,它将对每个用户击键作出反应

有关使用原始模式的信息,请参见以下内容:

scanf手册上说:

“如果在第一次成功转换或转换之前到达输入结束,则返回值EOF 匹配失败。如果发生读取错误,也会返回EOF,在这种情况下 流(见ferror(3))已设置,设置了errno表示错误。”

。。在这种情况下,最好使用do..while approch和scanf(如果您希望存储scanf返回以检查错误):

与原始模式下的getchar()相同,它将对每个用户击键作出反应


有关使用原始模式的信息,请参见以下内容:

“但在输入下一个字符之前对每个字符作出反应”这在标准C中是绝对不可能的。您必须使用第三方或依赖于平台的API。@BadMiscuit,但这无助于我在输入下一个字符之前应用计算,或者我不明白you@n.m.哇!这太令人惊讶了。。我来自其他语言。什么语言?这可能会有帮助:“但在输入下一个字符之前对每个字符做出反应”这在标准C中是绝对不可能的。您必须使用第三方或依赖于平台的API。@BadMiscuit但这对我在输入下一个字符之前应用计算没有帮助,或者我不明白you@n.m.哇,这太令人惊讶了。。我来自其他语言。什么语言?这可能有帮助:
c!=EOF
-这没有意义,因为
c
是字符。EOF超出了
char
的范围。此代码还存在与OP试图克服的完全相同的行缓冲问题。
c!=EOF
-这没有意义,因为
c
是字符。EOF不在char的范围内,这段代码也遇到了OP试图克服的完全相同的行缓冲问题。
char c;
while (scanf(" %c",&c) != EOF) {
    <<< DO SOME CALCULATIONS ON 'c'>>>
}
char c;

do{
  scanf("%c",&c);
  /* DO SOME CALCULATIONS ON 'c' */
}while(c != EOF);