当我编译并运行它时,输出为:
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;
}
答案 0 :(得分:1)
getchar()
将从stdin读取一个字符并离开\ n。因此,当你打电话给scanf时 - 它会立即停止,你什么都没得到。要跳过空格并在格式化之前从非空格字符开始读取空格。
scanf(" %49[^\n]", filename);
不要混用%[]和%s
始终指定要读取的最大字符数(为nul-terminator留下一个额外的字符)
并使用最高警告级别进行编译 - 因此您不必返回菜单功能。
喔。并检查scanf的返回值
if(scanf(" %49[^\n]", filename) == 1)
printf("[ %s ]", filename);