使用Break来终止循环

时间:2017-01-24 17:08:01

标签: c file-handling

所以,这是一个非常基本的程序,我希望允许用户在文本文件中输入最多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");

}

如果输入退出时如何继续中断程序,而不是必须两次插入“退出”?

2 个答案:

答案 0 :(得分:4)

您的代码存在许多问题:

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

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

答案 1 :(得分: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>");

}