要求scanf识别无输入

时间:2013-12-09 16:54:14

标签: c newline scanf

我对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忽略前面的空白,任何帮助都非常感谢!

由于

2 个答案:

答案 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