2015-01-03 126 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()限制量它讀取的字符。所以你可以刪除它。