输入一段话,出现句号,感叹号,问号时,句子结束。按照反向的单词顺序输出。是C现代方法第8章数组的课后题。
一个问题是:while()循环中,(pun=getchar())!='.'&&(pun=getchar())!='!'&&(pun=getchar())!='?不知为什么不对。所以我只添加了一个条件:(pun=getchar())!='.'暂时没出错。
第二个问题,我这个运行后,倒数第一个单词的最后一个字母显示不出来。例如give me a five.输出结果是fiv a me give.少了一个e。但我实在找不到了。谢谢谢谢
#include
int main(void)
{
char message[100],pun;
int i=0,m=0,n=0,i_1;
printf("Enter a sentence :");
while((pun=getchar())!='.'){
message[i]=pun;
i++;
}
n=i-1;
while(n>0){
n--;
m=n;
if(message[m]==' '){
for(;m+1<(i-1);m++){
printf("%c",message[(m+1)]);
}
printf("%c",message[n]);
i=n+1;//留给i作为此时剩下的长度.
}
}
for(i_1=0;i_1<i-1;i_1++)
printf("%c",message[i_1]);
printf("%c",pun);
return 0;
}
第一个问题是getchar()函数每调用一次会读取一次输入的字符, 如果语句 pun = getchar() 在循环判定中如果被多次调用, 就相当于一部分字符没被读取而没有存储。建议改成
7 while ((pun = getchar()) && (pun != '.' && pun != '!')){
///...
10 }
第二个是输出过程第一次循环时没有将message最末一个字符输出。建议修改为
16 for ( ; m + 1 < i ; m ++ ) { //这里 i - 1 改成 i
17 printf( "%c", message[ m + 1 ] );
18 }
19 printf(" ");
20 i = n ; //这里 n + 1 改成 n
另外由于这里 i 的赋值改变了, 后面的引用也注意修改。
http://blog.csdn.net/baidu_24014585/article/details/52733855
初学者不建议写过于复杂的语句,第一个可以分开写就非常明白了。同样建议多加括号优先级更清楚
while((pun=getchar())!='.'&&(pun=getchar())!='!'&&(pun=getchar())!='?')
这一句的问题是调用了多次getchar,其实是要求键盘输入三个字符才会走下去,改成如下:
pun=getchar();
while((pun!='.') && (pun!='!') && (pun!='?'))
{
...
pun=getchar();
}
初学者不建议写过于复杂的语句,第一个可以分开写就非常明白了。同样建议多加括号优先级更清楚
括号建议成对得写
初学者不建议写过于复杂的语句,第一个可以分开写就非常明白了。同样建议多加括号优先级更清楚
while((pun=getchar())!='.'&&(pun=getchar())!='!'&&(pun=getchar())!='?')
这一句的问题是调用了多次getchar,其实是要求键盘输入三个字符才会走下去,改成如下:
pun=getchar();
while((pun!='.') && (pun!='!') && (pun!='?'))
{
...
pun=getchar();
}
先是串内部单词逆序,最后整个串逆序。。。。这看了才知道