2016-06-10 3 views
-1

У меня есть программа, которая позволяет пользователю добавлять текстовый файл среди других функций, но я только что показал 2, чтобы это было просто. Проблема в том, когда пользователь выбирает, скажем, вариант №. 1, «Добавить» & «Ввести предложение:» получается отлично, но программа завершает работу, то есть до того, как пользователь может ввести предложение, он завершает работу. Как это исправить ? (я попробовал простой пример с Scanf & PRINTF заявления, которые работают, но здесь я работаю с файлом, и я не в состоянии получить необходимые входные!)C программа завершает работу перед принятием ввода

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!"); 
    } 
} 
+0

Ваш сканер сохраняет \ n в буфере, замените его с помощью getc, возможно, изменив выбор на char? – Gar

+0

Некоторый аромат этого вопроса был задан тысячу раз раньше, пожалуйста, сделайте некоторое исследование, прежде чем спрашивать. Также, пожалуйста, не используйте get, эта функция была отмечена устаревшей в течение последних 17 лет. Почему вы изучаете C из источников старше 17 лет? – Lundin

ответ

0

Когда пользователь вводит выбор, по-видимому они нажимают кнопку ввода, прежде чем вы начнете обрабатывать свой выбор. Затем ваше использование функции gets приводит к тому, что ваша программа интерпретирует этот «\ n» как входной. Вместо этого вы можете использовать scanf вместо строки формата «% s» для чтения в буфер вместо get.

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

В качестве альтернативы, если вы настаиваете на хранение получает, грязный раствор может использовать ЕОКП право после вызова зсапЕ для выбора, или прочитать дополнительный символ в этом Scanf вызова, чтобы обработать «\ п».

... 
scanf ("%d%c", &choice); 
getc(); 
... 
Смежные вопросы