在if语句中调用函数或切换不正常

时间:2017-09-25 19:38:58

标签: c

当我编译并运行它时,输出为:

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

但是,如果我直接调用 new(); ,它会完美运行。但是当我在if语句或switch语句中调用 new(); 时,它会显示上面的输出。 我在 new()功能中尝试了 scanf fgets 获取但仍无法正常工作。

#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;
}

1 个答案:

答案 0 :(得分:1)

getchar()将从stdin读取一个字符并离开\ n。因此,当你打电话给scanf时 - 它会立即停止,你什么都没得到。要跳过空格并在格式化之前从非空格字符开始读取空格。

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

不要混用%[]和%s

始终指定要读取的最大字符数(为nul-terminator留下一个额外的字符)

并使用最高警告级别进行编译 - 因此您不必返回菜单功能。

喔。并检查scanf的返回值

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