简体   繁体   中英

Calling function in if statement or switch not working properly

When I compile and run this the output is:

press n to continue
n
Enter the filename: [ �h�� ]

But, if I call the new(); directly it run perfectly. But when I call new(); in if statement or switch statement, it shows the above output. I tried scanf , fgets and gets in the new() fucntion but still not working.

#include<stdio.h>
#include<stdlib.h>

int menu();
int new();

int main(){

    menu();

    return 0;
}

int menu(){
    printf("press n to continue\n");
    //char c = getc(stdin);
    char c = getchar();

   if(c=='n'){
      new();
   }
   else if(c==27){
      return 0;
   }

}

int new(){

    char filename[50];

    printf("Enter the filename: ");
    //fgets(filename, 50, stdin);
    scanf("%[^\n]s", filename);
    printf("[ %s ]\n\n", filename); 

    return 0;
}

getchar() will read one character from stdin and leave the \\n. So when you call scanf - it stops immediately and you got nothing. To skip whitespaces and start reading from non-space character add space before format.

scanf(" %49[^\n]", filename);

Do not mix %[] and %s

Always specify max number of chars to read (leaving one additional char for nul-terminator)

And compile with highest warning level - so you do not leave menu function without return.

Oh. and check the return value of scanf

if(scanf(" %49[^\n]", filename) == 1)
    printf("[ %s ]", filename);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM