C 为什么while循环不起作用?
我不熟悉c语言,我的代码遇到了一些问题。。我必须制作一个程序来计算租车的价格,但是while循环不能正常工作。while条件上面的scanf是%s而不是%c,因为它不允许我在%c时给出一个字符。提前谢谢C 为什么while循环不起作用?,c,C,我不熟悉c语言,我的代码遇到了一些问题。。我必须制作一个程序来计算租车的价格,但是while循环不能正常工作。while条件上面的scanf是%s而不是%c,因为它不允许我在%c时给出一个字符。提前谢谢 int main(){ float skms, ekms, tkms, price; char catcode; int days; do{ printf("Selected rental program:\n"); scanf(
int main(){
float skms, ekms, tkms, price;
char catcode;
int days;
do{
printf("Selected rental program:\n");
scanf("%c",&catcode);
printf("Enter number of days:\n");
scanf("%d",&days);
printf("Starting kilometers display:\n");
scanf("%f",&skms);
printf("Kilometers display at end of rent:\n");
scanf("%f",&ekms);
tkms=(ekms/10)-(skms/10);
switch(catcode){
case'a':
case'A':
price=ammountDueA(days, tkms);
printf("%.2f\n",price);
break;
case'b':
case'B':
price=ammountDueB(days, tkms);
printf("%.2f\n",price);
break;
case'c':
case'C':
price=ammountDueC(days, tkms);
printf("%.2f\n",price);
}
printf("Select rental program.('Q' or 'q' to exit)\n");
scanf("%s",&catcode);
}while(catcode==!'Q'&&catcode==!'q');
printf("%c",catcode);
return 0;
}
“不工作”,我想你的意思是它永远不会进入第二次迭代,但这正是它应该做的<代码>catcode==!'Q'&&catcode==!'如果
catcode
等于,则q'
为真Q'并等于!'q'
'Q'
是一些非零整数(取决于您的系统,但可能是81),并且!'Q'
为零。类似地,!'q'
为零catcode
不是零,因此循环终止。代码中有两个问题:
首先,scanf
中的说明符
scanf("%s", &catcode);
这行不通。“%s”
说明符期望其相应的参数是一个char*
到一个未指定长度的缓冲区(即:它有)。您可能指的是“%c”
,其相应的参数应指向单个字符。现在,不建议将格式说明符设置为“%c”
,而应设置为“%c”,因为额外的空间表示scanf()忽略它前面的所有空白。所以,这条线变成了
scanf(" %c", &catcode);
现在,您是对的,您的while
循环中有一个问题:
while(catcode==!'Q'&&catcode==!'q');
让我们用空格来“扩展”它,使您(显然)想要的更明显(这就是为什么要在操作符之间使用空格!)
对你来说似乎没问题。不适合我。C语言没有定义任何操作符相反,它定义运算符==
(用于比较相等性)和运算符代码>(对其单个操作数求反)。编译器会将该行理解为
while(catcode == !'Q' && catcode == !'q');
那是什么意思?如果操作数为非零,则
运算符返回零(在本例中为空字符,'\0'
)。否则,它将返回一个非负值(通常为1
(标准是否规定了这一点?)。因为'Q'
不是'\0'
,对于'Q'
也是一样的,这意味着您的循环是有效的
while(catcode == '\0' && catcode == '\0'); // Think of '\0' as 0
代码中表示的绝对无意义!解决方法是简单地使用操作符=代码>(比较不平等性)
我希望这能给你带来一些启示 什么是===代码>操作员应该做什么?catcode==!'Q'
应该是catcode!='对于不等式表达式,您应该使用=代码>而不是==代码>。例如:intx=0;如果(x!=10){/*TODO*/}
如果希望catcode是字符串,则将其声明为“char catcode[];”你的意思是做{}(while);。。。
while(catcode == '\0' && catcode == '\0'); // Think of '\0' as 0
while(catcode != 'Q' && catcode != 'q');