当他在 C++ 上键入时,我如何检查用户的输入?
How can i check user's input while he types it on C++?
作为一名新程序员,我正在做一些培训练习以适应 Windows 上的 C++。
从类型为 String 的用户那里获取输入,格式为:
(any word) || (any word || <any word || any word> || (any word> etc.
实时警告用户,如果:
() or/and <> Are closed before the input ends.
例如,如果用户键入:
(I am ok
到时候我得警告他,一个括号已经打开了,但是还没有关闭。
因为我是初学者,所以我对如何进行有点迷茫,我不喜欢现成的解决方案,而是一种继续进行的方式。
- 我使用代码块 IDE 和 GCC 编译器。
提前致谢。
只是一个想法:
使用定期自动刷新数据的文本编辑器。
这是个坏主意,但您可能必须使用无限循环定期检查所有数据,直到 EOF
(文件结束)。(您可以使用 getchar()
)
仍然主要取决于 OS 如何处理文件 rwx
这对于标准 C 函数是不可能的,因为它们都在返回之前等待 line/file 指示符结束。用户必须在输入每个字母后按回车键。
此外,标准 C 无法重新定位您将在控制台中写入警告的位置。
由于这是一门初学者编程课程,您的老师似乎只是在寻找一个非标准的控制台功能。如果您的老师是某种恐龙,解决方案是使用 conio.h
中的函数。否则,如果你的老师是体面的,解决方案是使用 Ncurses 或 Windows API 控制台功能,或类似的现代平台相关解决方案。
首先,这是 C++ 而不是 C,因为我们在 C 中没有称为命名空间的东西。std 是一个 nampesapce。所以我们在 C 中没有 std::flush,正如评论中所解释的,你不需要它。
我只是告诉你怎么做(我不会写代码!):
您还没有告诉平台您正在编写代码假设它 windows
您应该使用名为 getche()
的函数。它从用户
获取一个字符
声明一个布尔变量,保存括号和angular括号的状态。
将 getche()
函数放入循环中,当您遇到“(”或“<”时,将变量设置为 false。
如果您遇到结束括号(我的意思是')'或'>')设置该变量为真。
在应用程序结束时检查变量状态。如果为真,则表示没有遇到错误,否则用户有错误。
终于给大家举个例子了
示例:
typedef int boolean; /* Just ignore it. Just know it declares boolean type. */
boolean brastate, angbrackstate;
char ch = getche();
while(ch != EOF) {
if( ch == '<') {
angbrackstate = false;
... /* Do the remaining yourself as you like challenges!!! */
祝你好运!
作为一名新程序员,我正在做一些培训练习以适应 Windows 上的 C++。
从类型为 String 的用户那里获取输入,格式为:
(any word) || (any word || <any word || any word> || (any word> etc.
实时警告用户,如果:
() or/and <> Are closed before the input ends.
例如,如果用户键入:
(I am ok
到时候我得警告他,一个括号已经打开了,但是还没有关闭。
因为我是初学者,所以我对如何进行有点迷茫,我不喜欢现成的解决方案,而是一种继续进行的方式。
- 我使用代码块 IDE 和 GCC 编译器。
提前致谢。
只是一个想法:
使用定期自动刷新数据的文本编辑器。
这是个坏主意,但您可能必须使用无限循环定期检查所有数据,直到
EOF
(文件结束)。(您可以使用getchar()
)
仍然主要取决于 OS 如何处理文件 rwx
这对于标准 C 函数是不可能的,因为它们都在返回之前等待 line/file 指示符结束。用户必须在输入每个字母后按回车键。
此外,标准 C 无法重新定位您将在控制台中写入警告的位置。
由于这是一门初学者编程课程,您的老师似乎只是在寻找一个非标准的控制台功能。如果您的老师是某种恐龙,解决方案是使用 conio.h
中的函数。否则,如果你的老师是体面的,解决方案是使用 Ncurses 或 Windows API 控制台功能,或类似的现代平台相关解决方案。
首先,这是 C++ 而不是 C,因为我们在 C 中没有称为命名空间的东西。std 是一个 nampesapce。所以我们在 C 中没有 std::flush,正如评论中所解释的,你不需要它。
我只是告诉你怎么做(我不会写代码!):
您还没有告诉平台您正在编写代码假设它 windows
您应该使用名为
getche()
的函数。它从用户 获取一个字符
声明一个布尔变量,保存括号和angular括号的状态。
将
getche()
函数放入循环中,当您遇到“(”或“<”时,将变量设置为 false。如果您遇到结束括号(我的意思是')'或'>')设置该变量为真。
在应用程序结束时检查变量状态。如果为真,则表示没有遇到错误,否则用户有错误。
终于给大家举个例子了
示例:
typedef int boolean; /* Just ignore it. Just know it declares boolean type. */
boolean brastate, angbrackstate;
char ch = getche();
while(ch != EOF) {
if( ch == '<') {
angbrackstate = false;
... /* Do the remaining yourself as you like challenges!!! */
祝你好运!