扫描程序等待另一个类似的程序
scanf - program waits for another like?
在下面的程序中,我希望在输入一个单词并按回车键后,我应该立即看到消息printf
显示出来。然而,它不会发生,直到我输入一些其他随机单词。为什么呢?
#include <cstdio>
#include <cstdlib>
using namespace std;
char tictac[17];
int main()
{
scanf("%sn", tictac);
printf("%sn", tictac);
return 0;
}
tl;dr:使用scanf("%sn", tictac);
,您要求读取字符串,忽略它之后的所有空白字符,然后读取新行。问题是由于所有空格都被第一个忽略,因此在第一个Enter和第二个Enter之间应该至少有一个非空白字符(因此需要在接受第二个Enter之前输入一些垃圾非空白)。
下面是scanf使用n的示例。
char x, y;
scanf("%c", &x);
scanf("%c", &y);
printf("%c %c", x,y);
使用此代码,您将看到输入一个字符并按Enter将直接进入printf
语句。这是因为第二次scanf将回车符(它本身就是一个字符)读入y。
scanf("n%c", &y); // This is recommended to do if you have a sequence of scanfs (but not on the first one).
在此情况下,偏离的回车符将被n
忽略(或匹配)。而正确的字符将被读为y。
现在当我们来到你的代码
scanf("%sn", tictac);
%s
告诉scanf
读取,直到找到blank character
(space, tab or new line
),然后这里是catch忽略所有空格,直到遇到非空格字符。因此您的scanf
将忽略您在输入字符串时按下的Enter。和它后面的任何空白字符 (尝试在第二行输入空格并按enter。)
这意味着这将工作得很好(不像char版本)
scanf("%s", tictac);
scanf("%s", tictac2);
实际上在Windows上
因为"%s"导致库读取输入字符串,直到它找到一些空白,等效的格式说明符为"%[^ x20tn]",指示库读取字符串直到它遇到一个空格字符( x20)、一个制表符字符(t)或一个换行符(n).
然而,由于您明确要求scanf
匹配n
scanf("%sn", tictac);
^^
它将等待直到获得另一个n
(在非空白字符之后),因为第一个字符被%s
使用。
从scanf调用中删除n
这里对scanf有很好的解释。在您的示例中,应该从scanf函数中删除n。
相关文章:
- 如何使用C++读取另一个程序中的源代码输出
- 如何将一个窗口保留在另一个应用程序窗口的前面
- 将库链接到另一个应用程序时,CMAKE 找不到库
- 程序在使用 system() 启动另一个可执行文件时停止
- 使用另一个程序调用正在运行的 C++ 程序中的函数
- 调试控制台 ChessEngine.exe "used"在另一个应用程序(国际象棋 GUI)中
- C++将结构复制到另一个程序的资源
- 如何在 qt 中从另一个线程运行 qt并发时关闭程序
- 试图让C++程序循环回到代码中的另一个点
- 为什么在我的程序中输入另一个输入会给我不同的结果
- 在 Windows 10 中将一个应用程序放在另一个应用程序前面
- 将数据从一个应用程序单向发送到另一个应用程序的最佳做法
- C++启动另一个程序(客户端-服务器)的程序
- 如何在 eclipse 中将标准输入从控制台更改为另一个程序
- 当电子的窗口隐藏时如何激活另一个应用程序窗口
- 与 Python 中子进程中的另一个应用程序的交互式会话
- 如何在另一个终端中打开并稍后关闭来自c ++的另一个程序?
- 将UWP应用程序的简单INT发送到另一个程序
- 如何将整个C Glut程序编写为可以在另一个程序中调用的函数
- osX - 如何从我的 QT 应用程序启动另一个程序