您的位置:首页 > 其它

一个字符变量存储到动态分配内存引发的输入问题解决--连续输入scanf函数存在缓冲区的问题

2014-05-10 13:27 661 查看
运用 malloc 开辟内存对字符串输入进行存储,为什么输出不是输入的呢?改成整形变量就行了呢
RT

#include <stdio.h>
#include <stdlib.h>

void main()
{
int r,c;int i,j;
char *p;
printf("请输入地图的行数和列数,空格隔开:\t");
scanf("%d%d",&r,&c);
printf("请输入%d行%d列的地图:\n",r,c);

p=(char *)malloc(sizeof(char)*r*c);
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
scanf("%c",(p+c*i+j));
}
}
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
printf("%c\t",*(p+c*i+j));
}
printf("\n");
}
}



出现这样的错误。

解决办法:

当用scanf函数输入数据时,会在键盘缓冲区留下一个换行符,下面再用scanf读取字符时,必然会先读取这个垃圾换行符。

解决方法是在scanf函数后面,直接添加一个getchar();这样就可以消灭掉scanf函数所遗留的垃圾换行符。

我在3楼已经把修改的程序写出来了,你考虑一下红笔标的地方。

如果你是一行一换行的话。可以试一试下面:(特别注意输入时字符之间不能有分隔符)
#include <stdio.h>
#include <stdlib.h>
void main()
{
int r,c;int i,j;
char *p;
printf("请输入地图的行数和列数,空格隔开:\t");
scanf("%d%d",&r,&c);getchar();  ---------此getchar();  是为了消除前面scanf("%d%d",&r,&c);输入时留下的换行符!
printf("请输入%d行%d列的地图:\n",r,c);

p=(char *)malloc(sizeof(char)*r*c);
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
scanf("%c",(p+c*i+j));
}
getchar(); //----------如果连续输入的话,去掉这个 getchar();

}
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
printf("%c\t",*(p+c*i+j));
}

printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐