C语言问题,求高手帮忙!! 20

#include<stdio.h>intmain(){intn,j,k;charc[4097];scanf("%d",&n);while(n){k=0;gets(c);w... #include <stdio.h>
int main()
{
int n,j,k;
char c[4097];
scanf("%d",&n);
while(n)
{
k=0;
gets(c);
while(c[k])
{
for(j=k;c[j];j++)
{
if(c[j]!=' ')
c[j]=' ';
else
break;
}
printf("%s\n",c);
k=j+1;
}
n--;
}
return 0;
}

代码如上。while(n)是用来控制输入数据的次数。但执行出来只能输入一组数据。改成for循环也只能输入一组。。求大神指点下。。
展开
 我来答
hwm_2012
2012-11-28 · TA获得超过966个赞
知道小有建树答主
回答量:470
采纳率:0%
帮助的人:411万
展开全部
1.输入输出问题,在输入整数或浮点数后面直接输入字符或字符串,要清除一下回车号,或都在输入整数后直接清空缓存,再读取内容
2.越界问题,修正问题1后,如果内存里没有连继的'\0'字符,你这程序会严重越界:
语句 k=j+1;
前加一句
if(c[j]==0) break; //到尾就不要再循环了,防止越界

改完后的效果就是逐个把行首的单词换成空格输出,试验如下:
2
dfdfj asfasd adasd ad adsad adad
asfasd adasd ad adsad adad
adasd ad adsad adad
ad adsad adad
adsad adad
adad
adad

adasda dd fsfs swdsd
dd fsfs swdsd
fsfs swdsd
swdsd
swdsd
右对齐的,一贴上来就不齐了,算了吧
srests
2012-11-28 · 超过19用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:38.1万
展开全部
c语言输入之后,以回车结束,但是回车本身还存在在输入流当中,所以调用scanf后,再调用gets时,会直接读取回车,而不是等待输入,这样使得输入1的时候,看上去一闪而过,输入2时才会有一次输入,依此类推。只要在scanf之后清除一下输入流就行了。代码如下:
#include <stdio.h>
int main()
{
int n,j,k;
char c[4097];
scanf("%d",&n);
fflush(stdin);
while(n)
{
k=0;
gets(c);
while(c[k])
{
for(j=k;c[j];j++)
{
if(c[j]!=' ')
c[j]=' ';
else
break;
}
printf("%s\n",c);
k=j+1;
}
n--;
}
return 0;
}

最后,说一句,这段代码真牛逼,谁写的?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夜神月YOONA
2012-11-28 · TA获得超过339个赞
知道小有建树答主
回答量:219
采纳率:0%
帮助的人:252万
展开全部
经过测试发现。gets(c)这个函数,把 回车 都当做是输入一次了,如果你先输入2,按2下回车都跳出了,输入3,按3下回车就输出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
有心不迟
2012-11-28 · TA获得超过1021个赞
知道小有建树答主
回答量:377
采纳率:0%
帮助的人:191万
展开全部
请问下你这个函数的目的是什么?while(n)的目的是用来控制可以输入几个C数组数据是吗?怎么感觉你这个函数的目的是要把这个C数组给变空的字符串,不知道我理解你的意思了是不?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6de2577
2012-11-28 · 超过31用户采纳过TA的回答
知道答主
回答量:150
采纳率:0%
帮助的人:102万
展开全部
scanf("%d",&n);后面加上 scanf("%c",&ch);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式