0

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

    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”输入时执行循环和其他功能。您的所有见解都非常有帮助。非常感谢,亚历克斯。

4

2 回答 2

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)。

于 2013-03-08T22:00:31.153 回答
0

如果循环中的一个 scanf 遇到错误,这可能会导致 while 保护中的 scanf 行为不端(从您的角度来看)。

于 2013-03-08T21:49:44.690 回答