我今天开始进行C编程。
我想编写一个程序,不断询问用户提供一个整数作为输入,直到用户通过输入值'q'告诉程序停止。
到目前为止,我已经知道了:
#include <stdio.h>
int main () {
int x;
while ( x != "q") {
printf("Enter the integer: ");
x = getchar();
}
return 0;
}
输出为:
Enter the integer: 1
Enter the integer: Enter the integer: 1
,我无法退出程序。
我在做什么错了?
答案 0 :(得分:1)
一个字符常量用单引号引起来:'q'
。"q"
是一个字符串文字,它是一个字符数组,其衰减为指向第一个字符的指针。因此,编译器给出的警告
test.c: In function ‘main’:
test.c:5:14: warning: comparison between pointer and integer
while ( x != "q") {
^~
这是正确的代码
#include <stdio.h>
int main (void) {
// loop forever. Easier to make the condition to exit with if + break
while (1) {
printf("Enter the interger: ");
// declare where it is used, to avoid it being used uninitialized
int x = getchar();
// if an error occurs or there are no more input, x equals to EOF.
// to be correct, the program will need to handle the EOF condition
// as well. Notice the single quotes around 'q'
if (x == EOF || x == 'q') {
break;
}
}
return 0; // main defaults to return 0 in standard C ever since 1999,
// so this could have been omitted.
}
或do { } while
循环也可以工作:
int x;
do {
printf("Enter the integer: ");
x = getchar();
} while (x != EOF && x != 'q');
但这可能不是那么好,因为由于条件现在已经被反转,因此更难以阅读,因此x
需要在循环外部声明,您可能要做处理EOF
/ q
之外的其他值,因此您仍然需要if
。
关于双重提示-之所以会发生,是因为换行符'\n'
也是读取字符。
答案 1 :(得分:0)
我相信只有一个小错误,而不是while (x != "q")
试试while (x != 'q')
。
答案 2 :(得分:0)
这是一个简单的逻辑。
这就是您所需要的...
#include <stdio.h>
int main()
{
int x;
while(x != 'q')
{
printf("Enter the integer: ");
x = getchar();
//clear buffer or do this
getchar(); //this is required to avoid taking newline '\n'
//as the input (i.e. when you hit enter)
}
return 0;
}
问题应该是
“如何仅以特定字母退出程序而不按'Enter'?”
注意:我的回答没有回答。