同时循环使用EOF始终提示输入

时间:2013-03-08 21:41:40

标签: 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'输入时,我试图让程序执行循环和其他函数。 您的所有见解都非常有用。非常感谢,Alex。

2 个答案:

答案 0 :(得分:0)

如果循环中的某个scanf遇到错误,则可能导致while guard中的scanf行为异常(从您的角度来看)。

答案 1 :(得分:0)

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

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

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