我写了两个代码来把句子分成单词,其中一个有效,另一个无效。唯一的区别在于for循环下的if条件。第一个没有输出。第二个是预期产出。请讲逻辑,不要教人妖定律。我完全把我的逻辑应用到了这两个方面,我认为这在第一段代码中也是正确的。不工作: #include <stdio.h> void main(void){ int i=0, m=0, n=0, j, l=0; char sen[500], wrd[500][500]; printf("Input a sentence:\n"); gets(sen); while(sen[i]!='\0'){ l++; i++; } for(i=0;i<=l;i++){ if(sen[i] != ' '||sen[i] != '\0'){ //Here is the difference. wrd[m][n]=sen[i]; n++; } else{ wrd[m][n]='\0'; puts(wrd[m]); printf("\n"); m++; n=0; } }}工作一: #include <stdio.h> void main(void){ int i=0, m=0, n=0, j, l=0; char sen[500], wrd[500][500]; printf("Input a sentence:\n"); gets(sen); while(sen[i]!='\0'){ l++; i++; } for(i=0;i<=l;i++){ if(sen[i] == ' '||sen[i] == '\0'){ //Here is the difference. wrd[m][n]='\0'; puts(wrd[m]); printf("\n"); m++; n=0; } else{ wrd[m][n]=sen[i]; n++; } }}唯一的区别在于for循环的if条件。第一个有:if(sen[i] != ' '||sen[i] != '\0')第二个有:if(sen[i] == ' '||sen[i] == '\0') 最佳答案 第一个没有输出,因为if(sen[i] != ' '||sen[i] != '\0')总是计算为True。好吧,我试着用逻辑来解释你,而不必通过DeMorgan定律。假设输入了一个字符串:This is a string.控制将通过循环。考虑i=3,在索引时3个字符是 >( >)。现在,'s'条件将被检查。sen[3]='s'=ifsen[3] != ' '=True现在,sen[3] != '\0'>>True>>if(sen[i] != ' '||sen[i] != '\0')。因此,将执行True||True块体。因此,没有输出。现在True,索引4字符是if(i=4)。现在,' '条件将被检查。sen[3]=' '=ifsen[4] != ' '=False现在,sen[4] != '\0'>>True>>if(sen[i] != ' '||sen[i] != '\0')。再次执行False||True块体。因此,没有输出。True永远不会执行包含输出语句的块。更合乎逻辑的是,如果sen[i]不是空格,则要附加到if中。每个字符要么不是空格,要么不是换行符,所以这个条件总是正确的。在您的逻辑中,elseblok将仅在遇到wrd和OR(空)这两个字符时执行。由于这样的字符不存在,代码中的cc>块将永远不会执行。因此,没有输出。
10-08 20:24