2017-01-22 114 views
0

我寫了一個程序太長,無法複製到本網站。但是需要粘貼到網站上。C語言程序在switch語句中跳過部分函數。

下面是switch語句:

void enterName(); 

    int adminChoice; 
    printf("\nEnter Numeric Choice: "); 
    scanf("%d", &adminChoice); 

    switch(adminChoice) 
    { 
     case(1): 
     { 
      enterName(); 
     } 
    } 

下面是實際的功能:

void enterName() 
{ 
    FILE *fp = fopen("/home/matthew/Desktop/BBE.txt", "w"); 

    if (fp == NULL) 
    { 
     printf("Error opening file!\n"); 
     exit(1); 
    } 
    char comment[100]; 

    printf("Enter, String\n"); 

    fgets(comment, sizeof comment, stdin); 
    fputs(comment,fp); 
} 

會發生什麼是程序要求的字符串的用戶輸入。但是不允許有時間輸入所需的字符串。它只是結束程序。

+2

輸入「adminChoice」的值時,請記住用換行符(「Enter」鍵)結束它。這個鍵被添加到輸入緩衝區,以便從'stdin'讀取下一個你想要讀的東西。現在想想當這個換行符是'stdin'輸入緩衝區中的第一個字符時調用'fgets'會發生什麼。 –

回答

2

問題是,scanf()留下一個\n字符,它立即終止fgets()而不讀取任何內容。當它看到換行符或EOF時,fgets()將停止閱讀。

您可以使用hacky方法並在fetgs()調用之前使用getchar();。更好的選擇是使用fgets()來讀取adminChoice(並使用sscanf()strto*函數將其轉換爲整數),以避免使用scanf()。無論如何,在使用fgets()時,你總是得留意換行符。