whyyouhitme_ 2018-03-07 15:28 采纳率: 57.1%
浏览 927
已采纳

实在找不到问题了,求帮

输入一段话,出现句号,感叹号,问号时,句子结束。按照反向的单词顺序输出。是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;
}

  • 写回答

7条回答 默认 最新

  • ztbxxt 2018-03-07 23:17
    关注

    第一个问题是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 的赋值改变了, 后面的引用也注意修改。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型