user-0 提问: C语言问题求助！！

回复:
user: user-0
content: 引用 3 楼 自信男孩 的回复:#include <stdio.h> #include <string.h>  int main() {     char str[81],ch, len;     int row=0,j=0;      while((ch=getchar())!='\n' && j < 81) {    //防止越界         str[j]=ch;         j++;     }     str[j] = 0; //add '\0' into tail     len = j;     j=0;     char str2[81][81];     //int sum=strlen(str);    //上面已经能知道长度了，所以这里不要用sum调用strlen，减少循环～     for(int i=0;i<len;i++){         if(str[i]!=' '){             str2[row][j++]=str[i];         }         else{             str2[row++][j]='\0';             j=0;         }     }     for(;row>=0;row--){         printf("%s",str2[row]);         if(row!=0){             printf(" ");         }     }     return 0; }感谢

user: user-0
content: 引用 1 楼 user-3 的回复:你的str没有结束符，也没有末尾空格，因此最后一个单词可能出问题。确实是这样感谢

user: user-0
content: 引用 4 楼 qzjhjxj 的回复:楼主的修改如下，供参考：#include <stdio.h> #include <string.h>  int main() {     char str[81],ch;     int  row=0,j=0;     while((ch=getchar())!='\n'){          str[j]=ch;          j++;     }     str[j] = '\0';//加入结束标志     j=0;     char str2[81][81];     int  sum=strlen(str);     for(int i=0;i<=sum;i++){ //for(int i=0;i<sum;i++){        if(str[i]!=' '&& str[i]!='\0'){//if(str[i]!=' '){          str2[row][j++]=str[i];       //str[]尾部单词没有空格，是结束符'\0'        }        else{          str2[row++][j]='\0';//最后肯定执行这句了，row++多加一次的          j=0;        }     }     for(row--;row>=0;row--){ //row--退回一格，for(;row>=0;row--){         printf("%s",str2[row]);         if(row!=0){            printf(" ");         }     }          return 0; }  //this is a good idea //idea good a is this请按任意键继续. . .感谢

user: user-1
content: 楼主的修改如下，供参考：#include <stdio.h> #include <string.h>  int main() {     char str[81],ch;     int  row=0,j=0;     while((ch=getchar())!='\n'){          str[j]=ch;          j++;     }     str[j] = '\0';//加入结束标志     j=0;     char str2[81][81];     int  sum=strlen(str);     for(int i=0;i<=sum;i++){ //for(int i=0;i<sum;i++){        if(str[i]!=' '&& str[i]!='\0'){//if(str[i]!=' '){          str2[row][j++]=str[i];       //str[]尾部单词没有空格，是结束符'\0'        }        else{          str2[row++][j]='\0';//最后肯定执行这句了，row++多加一次的          j=0;        }     }     for(row--;row>=0;row--){ //row--退回一格，for(;row>=0;row--){         printf("%s",str2[row]);         if(row!=0){            printf(" ");         }     }          return 0; }  //this is a good idea //idea good a is this请按任意键继续. . .

user: user-2
content: #include <stdio.h> #include <string.h>  int main() {     char str[81],ch, len;     int row=0,j=0;      while((ch=getchar())!='\n' && j < 81) {    //防止越界         str[j]=ch;         j++;     }     str[j] = 0; //add '\0' into tail     len = j;     j=0;     char str2[81][81];     //int sum=strlen(str);    //上面已经能知道长度了，所以这里不要用sum调用strlen，减少循环～     for(int i=0;i<len;i++){         if(str[i]!=' '){             str2[row][j++]=str[i];         }         else{             str2[row++][j]='\0';             j=0;         }     }     for(;row>=0;row--){         printf("%s",str2[row]);         if(row!=0){             printf(" ");         }     }     return 0; }

user: user-1
content: 用指针写，更顺手点，供参考：#include <stdio.h> #include <string.h>  int main() {     char str[81],str1[81];     char *p,*q,*s;     int  flag=0;     gets(str);     p=str;     s=str1;     while(*p)p++;//指针到str的尾部     p--;     while(p >= str){//逆序          flag++;          if(*p==' '|| p==str){            q=p;            if(q != str){//str第一个单词前面没有空格              q++;              flag--;            }            while(flag--)*s++ = *q++;//单词拷贝，str最后一个搬到str1第一个            *s++ = ' ';            flag=0;          }          p--;     }     *s='\0';     puts(str1);          return 0; }  //this is a good idea //idea good a is this //请按任意键继续. . .

user: user-3
content: 你的str没有结束符，也没有末尾空格，因此最后一个单词可能出问题。