| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1183 人关注过本帖
标题:运用 malloc 开辟内存对字符串输入进行存储,为什么输出不是输入的呢?改成 ...
只看楼主 加入收藏
longxingxiu
Rank: 2
等 级:论坛游民
帖 子:73
专家分:64
注 册:2014-4-23
结帖率:91.67%
收藏
已结贴  问题点数:2 回复次数:8 
运用 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");
    }
}
搜索更多相关主题的帖子: 字符串 color 
2014-05-09 19:42
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:0 
估计你输入的格式有问题。你是怎么输入的?
2014-05-09 19:53
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:2 
如果你是一行一换行的话。可以试一试下面:(特别注意输入时字符之间不能有分隔符)
#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");
    }
}

[ 本帖最后由 kwxx 于 2014-5-10 07:55 编辑 ]
2014-05-09 20:00
longxingxiu
Rank: 2
等 级:论坛游民
帖 子:73
专家分:64
注 册:2014-4-23
收藏
得分:0 
回复 2 楼 kwxx
连续输入的话怎么还有不对呢!
图片附件: 游客没有浏览图片的权限,请 登录注册
2014-05-09 20:35
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:0 
如果连续输入的话,去掉我修改稿中的第二个  getchar();就可以了。

运行出错,是因为 scanf("%c",(p+c*i+j)); 接受了 scanf("%d%d",&r,&c);   输入时留下的回车符 。     


2014-05-09 20:40
longxingxiu
Rank: 2
等 级:论坛游民
帖 子:73
专家分:64
注 册:2014-4-23
收藏
得分:0 
回复 5 楼 kwxx
不懂,为什么会把scanf函数的enter给读进去;
如果改成用getchar的话怎么改啊,这是输入字符变量啊,而我要输入的是整形变量啊
 r=getchar();
   c=getchar();
这样不对吧,还请明示一下,谢谢啦!
2014-05-09 20:59
ppvae
Rank: 1
等 级:新手上路
帖 子:25
专家分:2
注 册:2014-1-18
收藏
得分:0 
我们从键盘输入数据,是存在输入缓冲区中。scanf从输入缓冲区读入数据。遇换行停止读入。但换行符会保留在缓冲区中,会被下一个scanf读入所以会出现这样的问题。
2014-05-10 00:17
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:0 
回复 6 楼 longxingxiu
当用scanf函数输入数据时,会在键盘缓冲区留下一个换行符,下面再用scanf读取字符时,必然会先读取这个垃圾换行符。
解决方法是在scanf函数后面,直接添加一个getchar();这样就可以消灭掉scanf函数所遗留的垃圾换行符。
我在3楼已经把修改的程序写出来了,你考虑一下红笔标的地方。

[ 本帖最后由 kwxx 于 2014-5-10 07:53 编辑 ]
2014-05-10 07:52
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:0 
你无论输入什么数据,最终一定会打回车确定输入,而此回车符就会遗留在键盘缓冲区中。
2014-05-10 07:58
快速回复:运用 malloc 开辟内存对字符串输入进行存储,为什么输出不是输入的呢? ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.109666 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved