在while循环中if else条件中,计数器值只增加一次

时间:2018-02-24 14:29:38

标签: c if-statement while-loop

以下代码的目的是

  1. 扫描机器人的位置
  2. 扫描位置的状态,无论是脏还是干净
  3. 持续这样做直到机器人连续3次“无”状态
  4. 问题是: 计数器值只增加一次,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;
    }
    

1 个答案:

答案 0 :(得分:1)

你有几个问题: -

  • count未初始化。因此,当您在while循环中使用它时 - 您要比较其他变量的值。你不知道 - 它没有说明。您应该在循环外使用0初始化它。

  • char location[1]也许您认为需要输入单个字符并将char*传递给strcmp?很清楚一些事情 - strcmp期望一个空终止的char数组。这里假设您在y中获得input或某些输入,但此处是否有\0?不,你没有留下任何空间。 解决方案是使input数组更大。 char input[4]也许。

  • &inputinput完全不同。对于数组类型,首先是类型char(*)[](指向数组的指针),第二个是指向char的指针。使用scanf格式说明符时,char*需要%s。你没有提供。

  • 使用scanf - s时添加错误检查。检查scanf的返回值,如果失败则打印并退出。

     if(scanf("%3s",input)!=1){
       fprintf(stderr,"Error in input\n");
       exit(1);
     }