【发布时间】:2018-10-25 18:43:03
【问题描述】:
我已经编写了两个代码来将句子拆分为单词,其中一个有效,另一个无效。 唯一的区别在于 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')
【问题讨论】:
-
你看不出
!=和==之间的区别?他们做了两个完全相反的比较。 -
永远不要永远使用
gets! a dangerous function 甚至已从 C 语言中删除。使用例如fgets代替。 -
在无效代码中,条件始终为假。
-
是的,有区别。 :) 还有……什么?
-
您需要一个新的学习源 C。您当前的学习源已经完全过时了。此外,您不应在堆栈上分配 500x500 字节。
标签: c string for-loop if-statement