Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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)_C_Input_Buffer - Fatal编程技术网

输入缓冲区中的最后一个字符(C)

输入缓冲区中的最后一个字符(C),c,input,buffer,C,Input,Buffer,我试图寻找一个答案,但不能,希望有人能帮助。 我有以下代码片段: #include <stdio.h> #include <stdlib.h> int main() { char c = '\0'; int error = scanf(" %c", &c); // The user types now the following: A54fG6 while (error != EOF) { printf("%c

我试图寻找一个答案,但不能,希望有人能帮助。 我有以下代码片段:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char c = '\0';
    int error = scanf(" %c", &c);

    // The user types now the following: A54fG6

    while (error != EOF) {
        printf("%c", c);
        error = scanf(" %c", &c);
    }
    return 0;
}
#包括
#包括
int main()
{
字符c='\0';
int error=scanf(“%c”,&c);
//用户现在键入以下内容:A54fG6
while(错误!=EOF){
printf(“%c”,c);
错误=scanf(“%c”,&c);
}
返回0;
}

在第一个注释为的地方,输入缓冲区指向A。然后它进入while循环,打印字符“A”,第二个scanf将输入缓冲区前进到指向5。在上一次迭代之后,当printf打印“6”时,第二个scanf指向哪个字符


或者换言之,我如何知道程序何时完成读取当前输入缓冲区,然后在scanf提示用户输入更多字符之前执行某些操作?

首先,
scanf
是一个函数。它指向一些代码,这些代码在每次调用它时都会运行。不适合一个角色

scanf
的输入缓冲区是
stdin
(至少在您的情况下是这样),并且在程序运行时它是打开的。无论何时调用
scanf
,它都会尝试读取
stdin
。如果没有什么可读的,它会要求用户输入一些内容。这就是它的工作方式


现在,用户可能会引入EOF字符,但我认为这不是您想要的。

“第一条注释在哪里,输入缓冲点在A”,什么注释?什么?下一步“scanf”将从stdin输入下一个可用字符。在本例中,下一个字符可能是“\n”(换行符)。scanf的下一次执行将(如果它在格式字符串中有前导空格,就像您的一样)使用换行符,然后返回下一个可用字符(可能来自下一次用户击键),但是,scanf中的格式字符串将跳过空格、制表符、换行符。因此,如果您的代码想要接收这些字符中的任何一个,那么最好使用getch,而不是使用scanfSorry作为“注释”和“A”术语,它是在旧的编辑中,我现在将其编辑到代码中,它不完全是“要求”用户输入内容,而是阻止等待输入可用。我遇到的问题是,上面的程序不是最终到达“返回0”术语,而是打印用户键入的字符的确切序列,然后停止。它不是“停止”。它要求更多的字符,就像你指示它做的那样。您可以使用“结束”字符,也可以手动插入EOF。谢谢您,这对我帮助很大,我使用了“结束”字符。顺便说一句,你提到的一些我不知道的事情(可能值得更多的人知道)是,当你手动输入时,常量EOF不会出现,所以你必须手动插入它或从文件中读取。我很高兴我提供了帮助。请注意,这些文件实际上没有EOF字符(),现在它只是一个常量。另外,请考虑接受/接受我的回答: