2015-01-03 91 views
-2

我是一名超级初学者程序员。基本上我有这样的代码:do {}虽然不会终止

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 != ""); 
} 

我以为循环应该停止与一个输入按下,如同时陈述。有什么问题?

+1

你不能用'!='比较字符串。 – Zeta

+1

'animalname!=“”'不计算你的想法(它比较内存地址而不是内容)。如果你想比较字符串,使用'!strcmp(animalname,“”)''。 –

+0

你应该在你的编译器中启用所有的警告和调试信息(例如用'gcc -Wall -Wextra -g'编译) –

回答

2

你不能比较字符串与!=,因为那只会比较指针。相反,你必须使用strcmp或类似的功能:

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

使用fgets()以获取输入。 %s格式说明符在您按下时不会扫描任何内容,而fgets会扫描它。另外,更改

scanf(" %s", &name); 

scanf(" %s", name); 

这样做是因为数组的名称衰变到一个指针到它的第一element.Replace下面scanffgets

scanf(" %s", &animalname); 

此外,字符串比较必须使用string.h中的strcmp()函数完成。通过使用==,你比较指针(回想一下,数组名衰变到一个指向它的第一个元素)。您的完整的代码看起来像

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()限制量它读取的字符。所以你可以删除它。