我正在尝试只阅读一个字符,但我的循环继续抓住输入的密钥和'输入'键。如何防止这种情况发生,只抓住第一把钥匙?这是一个例子:
#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;
int rseed = 1448736593;
int main(int argc, char** argv) {
printf("#Program started successfully with random seed %i\n", rseed);
int c;
while(true) {
printf("input: ");
c = getchar();
printf("You selected %i\n", c);
}
return 0;
}
以下是代码给出的内容:
#Program started successfully with random seed 1448736593
input: 2
You selected 50
input: You selected 10
input: 3
You selected 51
input: You selected 10
input: 1
You selected 49
input: You selected 10
input: ^C
如何保持它还告诉我我选择了10
?我希望保留这一点,因为当用户点击进入&#39;没有别的。
答案 0 :(得分:1)
您获得的第二个值(10
- 换行符/换行符的十进制ASCII代码)是因为按Enter键产生的换行符。
最简单的解决方法:
c = getchar();
if (c != '\n') // or (c != 10)
getchar(); // call again getchar() to consume the newline
printf("You selected %i\n", c);
现在输出是:
input: 2
You selected 50
input: 3
You selected 51
input: // <- Enter alone was pressed here
You selected 10
input: 1
You selected 49
input: ^C
但是在用户输入多个字符之前输入多个字符的情况在此处未处理,在这种情况下,每个第二个字符都将被忽略。
答案 1 :(得分:0)
char c = getchar();
当控制在上面的行上时,getchar()函数将接受单个字符。接受字符控制后仍保持在同一行。当用户按下回车键时,getchar()函数将读取该字符,并将该字符分配给变量'c'。
答案 2 :(得分:-1)
忽略换行符:
int getchar2(void) {
int ret;
do {
ret = getchar();
} while (ret == '\n');
return ret;
}