循环无法结束

sky?? 2016-04-18 06:41:15
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。

句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”。
我写的程序如下,可是循环结束不了啊
#include<stdio.h>
#include<string.h>
void main()
{
char a[20][15],*b[20];

int i,j=0;
for(i=0;i<20;i++)
b[i]=a[i];
printf("请输入一个句子:\n");
for(i=0;;i++)
{ for(j=0;;j++)
{getchar(a[i][j]);
if(a[i][j]==' '||a[i][j]=='\0') break;}
if(a[i][j]=='\0')
break;

}
for(j=i;j>=0;j--)
printf("%s\n",b[j]);
}
...全文
167 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
一根烂笔头 2016-04-20
  • 打赏
  • 举报
回复
楼上已经解决了,我再给个方案

scanf("%s", buff);
len = strlen(buff);
int i,j;
j = i = len - 1;
for(; i >= 0; --i) {
     if(buff[i] == ' ' || i == 0) {
            int k = i;
            while(k != j) 
                    printf("%c", buff[k++]);
           printf(" ");
           j =  --i;
     }
}
如果有第三方库包含substr接口,那么上文中的while循环可以直接使用substr替换 此外,还有一种解决方案使用strtok函数,不过这个需要栈和内存分配结合使用
flyjalor 2016-04-19
  • 打赏
  • 举报
回复
首先要理解你自己的代码的含义. for(i=0;;i++)//这里有BUG,要是超过20个单词怎么办? { for(j=0;;j++)//同样的,超过14个字符也有问题 { getchar(a[i][j]); if(a[i][j]==' '||a[i][j]=='\0') break; } if(a[i][j]=='\0')//主要是这里,什么时候发生这个条件?发生不了,因为在内层循环里面也有个if(a[i][j]==' '||a[i][j]=='\0') 这是死循环的症结所在。 break; }
小灸舞 版主 2016-04-18
  • 打赏
  • 举报
回复
getchar(a[i][j]);这是什么用法。。。。

#include<stdio.h>
#include<string.h>

void a(char *p)
{
char temp[100];
int b = strlen(p);
int k = 0;
char temp1[100];
int i = 0;
for(i=0;i<b;i++)
{
temp[i]=p[b-i-1];
}
temp[b]='\0';
//puts(temp);
int j = 0;
//要循环结束条件为: j <= b
for(j=0;j<=b;j++)
{
//此处应为判断,用 '==',还要考虑句尾的情况,要不最后一个单词打印不出来
if(temp[j]==' ' || temp[j] == '\0')
{
int l = 0;
for(;k<j;k++)
{
temp1[k]=temp[j-l-1];
l++;
}
//在单词之间添加空格
temp1[j] = ' ';
k++;
}
}
temp1[b]='\0';
puts(temp1);
}

int main()
{
char ch[100];
gets(ch);
a(ch);
return 0;
}

眼镜宅之小松 2016-04-18
  • 打赏
  • 举报
回复
为啥不用指针,当指到空格跳出,储存

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧