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循环也只能输入一组。。求大神指点下。。 展开
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循环也只能输入一组。。求大神指点下。。 展开
8个回答
展开全部
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
右对齐的,一贴上来就不齐了,算了吧
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
右对齐的,一贴上来就不齐了,算了吧
展开全部
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;
}
最后,说一句,这段代码真牛逼,谁写的?
#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;
}
最后,说一句,这段代码真牛逼,谁写的?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
经过测试发现。gets(c)这个函数,把 回车 都当做是输入一次了,如果你先输入2,按2下回车都跳出了,输入3,按3下回车就输出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请问下你这个函数的目的是什么?while(n)的目的是用来控制可以输入几个C数组数据是吗?怎么感觉你这个函数的目的是要把这个C数组给变空的字符串,不知道我理解你的意思了是不?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf("%d",&n);后面加上 scanf("%c",&ch);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询