我试图使用getchar / putchar运算符编写一个简单的程序。它必须以行显示文本并将其打印出新行的每个句子。
我写了这段代码,但它对我来说意外,例如我写了
"I can't program. Help me. Please."
打印出来:
I can't program.
. Help me.
. Please.
为什么它重复"。" ??? 我的代码是:
#include <stdio.h>
#include <stdio.h>
int main(void) {
int stop=0;
int i;
printf("enter your text: ");
while((i=getchar())!=EOF){
if(i=='.')
{
stop=1;
putchar(i);
putchar('\n');
}
if(i==' ')
{
if(stop==0) putchar(i);
}
else if(i!=' '||i!='.')
{
putchar(i);
stop=0;
}
}
return 0;
}
提前谢谢。
答案 0 :(得分:1)
但重新格式化有助于理解错误
if(i == '.') {
stop = 1; // part A
putchar(i);
putchar('\n');
}
if(i == ' ') {
if(stop == 0) { // Part B
putchar(i);
}
} else if(i != ' ' || i != '.') {
putchar(i); // Part C
stop = 0;
}
当char i
包含点时,
在else部分,测试总是成功,因为你写了一个&#34;或&#34;而不是&#34;和&#34;。因此,点 如何解决问题:在您的问题中有3种情况(点,空格,其他),您应该避免两次表达相同的比较。 可能性是一系列if / else-if /... 更好的解决方案是使用开关if (i == '.') {
// process dot
} else if (i == ' ') {
// process space
} else {
// process other
}
switch (i) {
case '.':
// process dot
break;
case ' ':
// process space
break;
default:
// process other
break;
}
答案 1 :(得分:0)
此:
else if(i!=' '||i!='.')
毫无意义,你的意思是
else if(i != ' ' && i != '.')