2

我正在开发一个用 C 编写的简单应用程序。我在 Unix 环境中工作。

我的应用程序正在执行一些简单的 I/O。我使用 printf 提示用户输入一些内容,然后使用 scanf 获取该输入。

问题是,我不知道如何告诉我的应用程序在输入值后我已准备好继续。键入 'enter' 提供了一个有意义的换行符 '\n'。Control-d 确实允许 scanf 捕获我的输入,但似乎忽略了任何后续的 scanf 指令。

有人可以帮我吗?

printf("Enter name\n");
scanf("%s",input);
printf("%s",input);

printf("enter more junk\n")
scanf("%s",morestuff); /* cntrl+d skips this*/
4

2 回答 2

4

检查来自的返回值scanf()。一旦它获得 EOF(由于您键入control-D),它每次都会失败,直到您清除错误为止。

谨慎使用scanf();我发现在现实世界中使用它太难了,因为它不能让我控制我认为我需要的错误处理。我建议使用fgets()或等效的方法来读取数据行,然后使用sscanf()- 一个更文明的功能 - 来解析数据。

另请参阅一个松散相关的问题:SO 3591642

于 2010-08-30T03:13:38.197 回答
-1

[编辑:这个答案不正确,正如我在下面所说的,我也在学习]

你试过CTRL-Z吗?

这会将 EOF 发送到 scanf,根据其手册页,它应该使 scanf 移动到下一个字段。由于您仅输入了一个字符串作为输入格式,因此应该终止 scanf。

我现在无法测试,但你可以试一试。

手册页在这里:

http://www.slac.stanford.edu/comp/unix/package/rtems/doc/html/libc/libc.info.scanf.html

于 2010-08-30T03:16:16.390 回答