【发布时间】:2019-10-01 22:47:42
【问题描述】:
我正在尝试制作一个非常简单的 while 循环作为测试。本质上,while 循环中的语句询问您是否要继续。如果你输入了正确的字符,它应该会再次问你同样的问题。如果输入任何其他字符,则不应再满足 while 循环的条件,应退出 while 循环。但是,循环一次都没有执行,程序一开始就立即结束。这让我觉得我的条件有问题,但据我所知是满足的。
我尝试过仅使用整数作为条件来构建 while 循环(只要变量不等于特定值,循环就会运行。一旦变量等于值,循环结束。)该程序成功运行,但我无法让这个类似的代码使用字符作为输入来同样工作。
这是我的行号不起作用的代码:
#include <stdio.h>
void main(void)
{
char word="a";
while(word == "a")
{
printf("\ntest. enter a to continue");
scanf("%c", &word);
}
}
我的期望:
test. enter a to continue
在我输入“a”之后,同样的语句应该重复,如果输入其他任何内容,程序应该结束
我实际得到的:
--------------------------------
Process exited after 0.6154 seconds with return value 4210688
Press any key to continue . . .
这是我从任何成功的程序完成后得到的,但我想要的输出高于虚线。在这种情况下,虚线上方没有输出,这意味着程序结束时根本没有输出。
我没有错误消息,但有以下警告消息:
[Warning] initialization makes integer from pointer without a cast (line 5)
[Warning] comparison between pointer and integer (line 6)
【问题讨论】:
-
word 是一个字符,“a”是一个字符串。试试 'a'(它实际上是一个 int,但会比较相等)。
-
在你的 C 编程生涯的这个阶段,你应该假设如果编译器打算给你一个警告,它已经在你的代码中发现了一个你必须修复的错误——它知道更多关于C比你做的。几年后,您可能会决定忽略一些更神秘的警告(也许;我只用 C 语言编码 30 多年,我很少冒这种风险),但我立即意识到像那些警告您显示的内容很重要,必须在运行代码之前修复。 (我主要使用 GCC 并且通常使用
-Werror以便将任何警告视为错误。) -
一旦程序完全循环,您可能需要在
scanf()中使用" %c"(%之前有一个空格)。这将跳过换行符;如所写,如果您键入a(并返回),则循环将在scanf()读取返回(换行符)字符时停止。空格会跳过空格,例如空格、制表符和换行符。
标签: c