c - 带 EOF 的 While 循环始终提示输入

标签 c input char eof

我花了一些时间来解决这个问题,并决定来这里看看是否有人能够帮助我。 我制作了一个给定的文本文件,并且在程序运行时将文本文件的内容发送到程序。 例如: 如果我说

    scanf("%d", &integerOne); 

那么我的文本文件应该将第一行(例如)数字 8 放入该插槽中 我希望它继续执行此操作,直到到达文件末尾,但这就是我遇到麻烦的地方。

与上面的示例不同,我使用的是字符:

    while((scanf("%s", userstring)) != EOF)
    {
            if(userstring[0] == 'c')
            {
                  scanf("%d", &cinput); 
            }
           if(userstring[0] == 'a')                       
           {        
                    scanf("%d", &cone);
                    scanf("%d", &cone);
           }
    }

只是为了一些背景,我创建了数组“userstring”来保存“c”(用于连接)或“a”(用于添加)。当程序没有收到任何更多的“char”输入时,我试图让程序执行循环和其他函数。 您所有的见解都非常有帮助。非常感谢,亚历克斯。

最佳答案

scanf返回已成功匹配并分配的输入项的数量,因此最好检查其返回值是否等于1。另请注意,此循环内的 scanf 调用可能会失败,因此,如果输入可能无效,您还应该检查它们的返回值:

while (scanf("%s", userstring) == 1)
{
    if (userstring[0] == 'c')
    {
        if (scanf("%d", &cinput) != 1)
            return -1;                  // TODO: scanf failed
    }
    ...
}

并回答您的实际问题:while始终提示用户输入另一个字符串,因为停止此读取的唯一方法是输入输入结束控制代码,即< kbd>Ctrl+Z(在 Windows 上)或 Ctrl+D(在 Mac、Linux、Unix 上)。

关于c - 带 EOF 的 While 循环始终提示输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15303814/

相关文章:

c - 我应该在函数指针的 typedef 中保留 `_In_` 、 `_Out_` 之类的宏吗?

c - 设置孪生指针的最有效算法

css - 输入内的填充打破宽度 100%

objective-c - Objective-C 中字符串到 UTF8 字符的转换

c++ - 如果在某些输入之后使用 getline() 将不起作用

java - 如果允许 JVM 在垃圾收集期间移动堆内存,那么垃圾收集如何不会因移动指针而导致 JNI 爆炸?

c++ - 如何为手机构建 slider 拼图软件

javascript 不移动元素

C++必须输入两次

c - 如何从C中的结构体中获取字符串?