| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2173 人关注过本帖
标题:二维数组用for语句输扩第一个数用两for语句输出时会出现乱码汉字,为什么
只看楼主 加入收藏
w984280264
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-8-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
二维数组用for语句输扩第一个数用两for语句输出时会出现乱码汉字,为什么
代码:
#include<stdio.h>
#include<conio.h>
main()
 {int i,j;
   char m[3][3];
   for(i=0;i<3;i++)
      scanf("%s",m[i]);
   for(i=0;i<3;i++)
      for(j=0;j<3;j++)
         printf("%c",m[i][j]);
     getch();
}               
我第一次输入一个单字符时会出乱码啊
I
mi
you
I 乱i you
这是什么,能详细点说吗,谢谢
搜索更多相关主题的帖子: include 汉字 
2013-08-16 20:51
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:7 
scanf("%s",m[i])这句话是对字符串数组m的元素赋值么?

思考赐予新生,时间在于定义
2013-08-16 21:02
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
要想输出一段话,一维数组就可以了,为何要用二维数组?C提供了很好的gets,puts函数,为什么不用?简简单单的只有三行。
何必拿一些复杂代码来跟自己过意不去?
程序代码:
#include<stdio.h>
void main()
{
    char m[20];
    gets(m);
    puts(m);
}


思考赐予新生,时间在于定义
2013-08-16 21:07
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:7 
回复 楼主 w984280264
you越界了

总有那身价贱的人给作业贴回复完整的代码
2013-08-16 21:48
XiaoXiao_Ren
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
威 望:1
帖 子:80
专家分:198
注 册:2013-7-17
收藏
得分:7 
回复 楼主 w984280264
奇怪 : 我的输出一直是正确的。

否极泰来
2013-08-16 22:18
w984280264
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-8-9
收藏
得分:0 
回复 2楼 love云彩
是的啊,不要加那个&吧,我想不通是为什么它输,二个或三个,就没问题呢
如,我输
ie
fg
gg
ie fg gg
三个也行,一个为什么不能呢
2013-08-17 09:05
w984280264
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-8-9
收藏
得分:0 
回复 5楼 XiaoXiao_Ren
你第一次不是只输一个字吧
2013-08-17 09:06
w984280264
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2013-8-9
收藏
得分:0 
回复 3楼 love云彩
谢谢啊,我只想用二维来表示下,让自己明白二维
2013-08-17 09:07
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

记住。你定义的m[3][3],是一个三行三列二维数组,所以一共有9个元素,在使用for语句逐个对m的元素赋值,空格符号也会被录入的。
如上图所示,i与love之间有个空格,这个空格会被赋值给m[0][1]。清点一下图中所示的输入语句,一共有10个字符,但不影响程序运行,只是最后一个u没有被赋值进去。
另外,我想问问LZ你。这些代码是想干嘛?
 for(i=0;i<3;i++)
      scanf("%s",m[i]);
m是二维数组,对m中的每一个元素赋值是用for语句,但要二重for循环,对每个元素赋值,格式是%c,%s是对整个字符串赋值或输出的格式。
下面代码仅供参考。
程序代码:
#include<stdio.h>
void main()
{
    int i,j;
   char m[3][3];
   for(i=0;i<3;i++)
       for(j=0;j<3;j++)
      scanf("%c",&m[i][j]);
   for(i=0;i<3;i++)
      for(j=0;j<3;j++)
         printf("%c",m[i][j]);
}


思考赐予新生,时间在于定义
2013-08-17 09:28
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
再看看如楼主这样的输入。
图片附件: 游客没有浏览图片的权限,请 登录注册

输入的先是ee,然后按回车换行,继续输入eee,再按回车换行,输入eeee。
注意输出的结果:我在前面一共输入了9个e,为什么最后输出的时候少了两个e?很简单,因为回车换行符也被录入赋值给m的元素了。
我在输出语句里面添加任何换行语句,而输出时却能原样输出,说明我在输入字符,按回车键的时候,回车换行符也被赋值给m的元素了。
因为你这个字符串数组的长度是9.所以尽管输入9个e,但是包含了两次换行,则有两个换行符被赋值给m的元素了,所以才少了两个e。

思考赐予新生,时间在于定义
2013-08-17 09:38
快速回复:二维数组用for语句输扩第一个数用两for语句输出时会出现乱码汉字,为什 ...
数据加载中...
 
   



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

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