C程序在接受输入之前退出

时间:2016-06-10 08:23:55

标签: c text-files

我这里有一个程序,允许用户在其他功能中附加文本文件,但我只是显示2以保持简单。问题是,当用户选择时,说选项号。 1,"追加" &安培; "输入一个句子:"出来很好,但程序退出...即,在用户输入句子之前,它退出。我该如何解决 ? (我已经尝试了一个更简单的示例,其中scanf& printf语句可以正常工作但在这里我正在处理文件而无法获得所需的输入!)

int main()
{
    int choice;
    char c[2000];
    FILE *fp;

    printf("Welcome to my Text Editor!\n");
    printf("Enter the letter for the operation that you would like to carry out on the file\n");
    printf("1 - Append a word to end of file\n");
    printf("2 - Search for a word in the file\n");

    scanf ("%d", &choice);

    if (choice == 1)
    {       
        printf ("Append\n");
        fp=fopen("C:/Users/Asim/Desktop/random.txt","a");
        if(fp==NULL){
            printf("Error!");
            exit(1);
        }
        printf("Enter a sentence:\n");
        gets(c);
        fprintf(fp,"%s",c);
        fclose(fp);
    }
    else if (choice == 2)
    {
        printf ("Search");
    }
    else
    {
        printf ("Invalid choice!");
    }
}

1 个答案:

答案 0 :(得分:0)

当用户输入一个选项时,可能会在您开始处理他们的选择之前按Enter键。然后,您对gets函数的使用会导致您的程序解释为' \ n'作为输入。您可以使用scanf代替格式字符串"%s"读入缓冲区而不是获取缓冲区。

...
printf("Enter a sentence:\n");
scanf("%s", c);
fprintf(fp,"%s", c);
...

或者,如果你坚持保持获取,一个混乱的解决方案可能是在你选择scanf之后立即使用getc,或者在scanf调用中读取额外的char,以处理' \ n'。

...
scanf ("%d%c", &choice);
getc();
...