以下代码的目的是
问题是:
计数器值只增加一次,counter = 1
,然后永不递增。这就是循环永远不会结束的原因。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char location[4];
char state[4];
int count=0;
//If the bot get state "no" 3 times continuosly, end the loop.
while(count<3){
//Scan bot location
printf("Bot Location ?\n");
scanf("%s",location);
if(strcmp(location, "a")==0){
printf("Is it dirty?\n");
//Scan state of the location, dirty or clean (yes or no)
scanf("%s",state);
if(strcmp(state,"yes")==0){
//Reset the counter value to zero if state is yes
count=0;
//printing the counter value
printf("Value of Counter %d \n",count);
printf("Clean\n");
printf("Go left to B\n");
}
else if (strcmp(state,"no")==0) {
printf("Go Left to B\n");
//Counter increment if state is no
count++;
printf("Value of Counter %d \n",count);
}
else {
printf("Wrong input\n");
}
}
else if (strcmp(location, "b")==0){
printf("Is B dirty?\n");
scanf("%s",state);
if(strcmp(state,"yes")==0){
//Reset the counter value to zero if state is yes, same as Location A
count=0;
printf("Clean\n");
printf(" Go Right to A\n");
printf("Value of Counter %d \n",count);
}
else if (strcmp(state,"no")==0) {
printf("Go Right to A\n");
//Counter increment if state is no, same as Location A
count++;
printf("Value of Counter %d \n",count);
}
else {
printf("Wrong input\n");
}
}
else {
printf("Location not found\n");
}
}
return 0;
}
答案 0 :(得分:1)
你有几个问题: -
count
未初始化。因此,当您在while循环中使用它时 - 您要比较其他变量的值。你不知道 - 它没有说明。您应该在循环外使用0
初始化它。
char location[1]
也许您认为需要输入单个字符并将char*
传递给strcmp
?很清楚一些事情 - strcmp
期望一个空终止的char
数组。这里假设您在y
中获得input
或某些输入,但此处是否有\0
?不,你没有留下任何空间。
解决方案是使input
数组更大。 char input[4]
也许。
&input
和input
完全不同。对于数组类型,首先是类型char(*)[]
(指向数组的指针),第二个是指向char
的指针。使用scanf
格式说明符时,char*
需要%s
。你没有提供。
使用scanf
- s时添加错误检查。检查scanf
的返回值,如果失败则打印并退出。
if(scanf("%3s",input)!=1){
fprintf(stderr,"Error in input\n");
exit(1);
}