在终止胜利的同时做{}

时间:2015-01-03 13:48:34

标签: c while-loop do-while

我是一名超级初学者程序员。基本上我有这个代码:

int main()
{        
    char name[30];
    printf("Name of the animal exchange: \n");
    scanf(" %s", &name);

    char animalname[14];
    int quantity = 0;
    int quantitysum;        
    int type = 1;

    do {        
        printf("A(z) %d. fajta neve: \n", type);                
        scanf(" %s", &animalname);

        while(strlen(animalname)<15) {                                    
            printf("Quantity: \n");
            scanf(" %d", &quantity);
            quantitysum += quantity;
            break;            
        }

        if(strlen(animalname)<15) {
            type++;            
        }        
    } while (animalname != "");
}

我认为循环应该在按下时按下一个输入停止。有什么问题?

3 个答案:

答案 0 :(得分:2)

您无法将字符串与!=进行比较,因为这只会比较指针。相反,您必须使用strcmp或类似功能:

while (strcmp(animalname, "") != 0);

答案 1 :(得分:0)

使用fgets()获取输入。当您按下输入时,%s格式说明符不会扫描任何内容,而fgets会扫描它。此外,变化

scanf(" %s", &name);

scanf(" %s", name);

这样做是因为数组的名称衰减为指向其第一个元素的指针。使用scanffgets放在下面:

scanf(" %s", &animalname);

此外,必须使用strcmp()中的string.h函数进行字符串比较。通过使用==,您可以比较指针(回想一下数组名称衰减到指向其第一个元素的指针)。您的完整代码将如下所示

int main()
{        
    char name[30];
    printf("Name of the animal exchange: \n");
    scanf(" %29s", name); //scan at-most 29 (+1 for the `\0`)

    char animalname[14];
    int quantity = 0;
    int quantitysum=0; //initialize to zero        
    int type = 1;

    do {        
        printf("A(z) %d. fajta neve: \n", type);                
        fgets(animalname,14,stdin);

        if(strlen(animalname)<15) {  //You have a break in the loop which means that you need an if as it will execute just once                 
            printf("Quantity: \n");
            scanf(" %d", &quantity);
            quantitysum += quantity;
            type++; //This can be done here itself
            //break;             
        }

        /*if(strlen(animalname)<15) {
            type++;            
        } This is done in the previous if*/       
    } while (strcmp(animalname,"")!=0);
}

请注意,if始终为真,因为fgets()会限制其读取的字符数。所以你可以删除它。

答案 2 :(得分:0)

它不会终止,因为while中的条件不会改变.....想要c#guide购买此书http://shoppingict.blogspot.com/2014/12/book-ultimate-c-guide-for-dummies.html?m=1