我有以下代码,检查用于char类型
do{
printf("Do you want to add an edge(n to stop adding)\n");
check = getchar();
}while(check!='n');
和
do{
printf("Do you want to add an edge(n to stop adding)\n");
scanf("%c",&check);
}while(check!='n');
它们都产生相同的输出
例如对于 r \ n ,我得你想要添加边缘两次,而说 tt \ n 我得到了同样的问题三次,然后询问输入。
我的问题是如何避免它以及它为什么会发生?
答案 0 :(得分:1)
您必须确保check
是字母数字,因为\n
或scanf
不会忽略getchar()
。
do {
printf("Do you want to add an edge(n to stop adding)\n");
do
{
check = getchar();
} while (!isalnum(check) && check != EOF);
} while(check!='n');
编辑:因为你只想要一行中的第一个字符:
char line[64];
fgets(line, 64, stdin);
check = line[0];
您仍需检查以确保check
在您输入的范围内。
答案 1 :(得分:1)
要解决您的问题,请尝试以下方法:
void main()
{
char check;
char c;
do
{
printf("Do you want to add an edge(n to stop adding)\n");
check = getchar();
do { c = getchar(); } while (c != '\n' && c != EOF); // This gobbles the rest of the chars on stdin
} while(check != 'n' && check != EOF);
}
答案 2 :(得分:0)
我在ubbuntu中使用nano编译器来编写程序。
程序要求输入,我只需要一位数字作为输入,输入后的“正常程序操作”应该继续输入程序。
程序必须继续遵循代码中记下的下一个操作,如printf(“”)。
实施例
-----------start-------------
Input : 2 3 4 5 6 7
------------end-----------------
没有用户输入“”(空格键),我想在程序本身中加入“”(空格键)。仅在用户 -
时才继续输入我不想要的任何一个。