我对C编程非常陌生,我正在寻找最简单的解决办法让scanf识别无输入,我的意思是按下输入键没有任何输入,它知道没有输入并返回主菜单。我在这看了一下,我发现了一个类似的问题,但scanf采用了一个整数值,而我需要一个字符串作为文件名。我的代码是:
FILE *Fpacket;
char filename[20];
puts("Please declare a name for the file"); // request filename
scanf("%s", filename); // store text in filename string
我尝试了fgets,getchar和afew其他的组合,但我不能让它将换行符作为输入。我知道scanf忽略前面的空白,任何帮助都非常感谢!
由于
答案 0 :(得分:2)
在%s
中没有使用scanf("%s", filename)
的解决方案,因为格式说明符在尝试填充\n
之前会占用空格,包括filename
。在发生非空白(或EOF或IO错误)之前,scanf()
将不会返回。
使用fgets()/sscanf()
char buf[MAXPATH + 2];
if (fgets(buf, sizeof buf, stdin) == NULL) handle_EOF_IOError();
if (buf[0] == '\n')
handle_OnlyEnterKeyPressed();
else
sscanf(buf, "%s", filename);
答案 1 :(得分:-1)
如果你想从键盘输入一个Newline(Enter)字符作为输入,那么你需要使用另一个键来终止字符串 //按Esc键终止字符串。
int main() {
char filename[20];
char ch;
int i;
i=0;
while ((filename[i] = std::cin.get()) != 27 && i<20) {
i++;
}
return 0;
}
如果按键盘上的Enter键,它将把它作为字符并存储在filename [i]上,while循环将永远不会终止,直到您按Esc或i&lt; 20