【问题标题】:Using Break to terminate for loop使用 Break 终止 for 循环
【发布时间】:2017-06-09 14:34:03
【问题描述】:

所以,一个非常基本的程序,我希望允许用户在一个文本文件中输入最多 10 个单词。

我想创建一个退出子句,这样如果用户输入一个特定的单词,程序就会停止

我正在尝试使用strcmp 并将“退出”与用户输入的单词进行比较。 如果两者都匹配,则终止。我知道如果两者相同,则返回 0,但是我无法编写:

{
char word[10];
FILE *fp;
int x;
int words = 0;

fp = fopen("c:\\CTEMP\\ExamProg1.txt", "w+");

{

    for (x = 0; x < 10; x++)

    {
        printf("\nType the word you want to add. Type exit to terminate: ");
        scanf("%s", word);

        if (strcmp(word, "exit") == 0)
        {
            break;
        }

        fprintf(fp, "%s\n", word);
        words++;
    }

    fclose(fp);
 }

scanf_s("%d");

}

输入exit时如何继续中断程序,而不必插入两次'exit'?

【问题讨论】:

  • if (strcmp(word, "exit")!=0) 您可以使用它,以便在不 = 为 0 时继续。
  • 这甚至合乎情理吗?我不认为函数调用结果是左值..
  • 是的,它确实可以编译。但是我的 if 语句包括 break 是错误的。
  • 发布word的定义。没有这个,帖子就不清楚了。
  • 完成,希望对您有所帮助

标签: c file-handling


【解决方案1】:

您的代码有很多问题:

  1. scanf("%s", &amp;word); 因为字符串本身就是一个指针或数组,所以地址运算符不应出现在对scanf 的调用中,其中扫描的输入被读入字符串。只需使用:scanf("%s", word);

  2. strcmp(word, "exit")=0= 运算符是赋值运算符,而不是比较(你想要的是strcmp(word, "exit") == 0)。您对“exit”一词的测试失败,因为您没有正确检查来自strcmp 的返回值。

【讨论】:

  • 感谢您的洞察力,但此时程序仍无法中断。我必须输入两次 exit 才能退出。看起来输入的第一个“退出”只会阻止程序执行第一个 printf 语句。
  • 当然你不会推荐gets()。为什么建议scanf("%s", word); 具有同样无限长度的问题?
  • @chux 我指出了他的代码中scanf 的错误用法;这不一定是对scanf的认可
【解决方案2】:

你可能想读这个词:

scanf("%99s", word); // where 99 == your buffer size - 1
                     //word is probably a pointer in your example so no &

scanf("%s",buf)gets(buf) 一样,可能存在巨大的安全隐患) 然后像这样与"exit" 比较:

 if (strcmp(word, "exit")==0) 

这是一个有效的虚拟示例:

int main()
{
    char buf[10];
    while(EOF!=scanf("%9s", buf)){ 
        printf("s=%s\n", buf);
        if(strcmp("exit",buf)==0){
            puts("<exit>");
            exit(0);
        }
    }
    if(feof(stdin))
       puts("<EOF>");
    else
       puts("<ERROR>");

}

【讨论】:

  • 您好,感谢您的建议。这段代码也适用于我,但是我希望通过使用普通的 break 语句来实现它的“更简单”(?)版本。通过包含 ==0 我仍然没有正确终止。
  • @RyanRizzo exit(0)break 一样正常。无论如何,break 将打破最近的封闭循环,这将是您示例中的 for 循环。为什么这不会导致程序终止完全​​取决于您未显示的代码。
猜你喜欢
  • 1970-01-01
  • 2018-12-18
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多