鱼C论坛

 找回密码
 立即注册
查看: 1868|回复: 14

[已解决]二维数组输出与输入

[复制链接]
发表于 2020-11-25 15:10:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么字符数组用一个s[i]就可以正确输出,代码如下:
#include <stdio.h>
#include <windows.h> 
void main(){
int i;
char s[6][3]={"学","习","编","程","语","言"};
for(i=0;i<6;i++)
{
printf("%s",s[i]);
Sleep(1000);
}
}//

而整型数组用一个s[i],输出却是错的呢?
#include<stdio.h>
void main()
{
        int i;
        char student[5][5]={{"小明"},{"小红"},{"小李"},{"小张"},{"小肖"}};
        int mark[5][5]={{85,78,93,68,76},{95,76,87,83,91},{78,69,83,79,83},{79,78,69,83,83},{91,89,78,88,85}};
        for(i=0;i<=4;++i)
        {
                printf("%d\n",mark[i]);
        }
}
最佳答案
2020-11-26 11:55:06
18878977809 发表于 2020-11-26 11:53
这么理解对吗:
  字符串输出%s,是从首地址开始读读到反斜杠零结束。例如:i=0时,a=a[0],数组名即 ...

     基本上就是这个意思。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-25 15:42:06 | 显示全部楼层
求一个大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-25 16:20:52 | 显示全部楼层
       首先,字符串和整型数在计算机内存中都是数字,这一点,二者是一样的,其中,字符储存的是字符的编码数值,而整型数储存的就是整型数本身,对于 ASCII 字符而言,每个字符占用一个字节,对于整型数而言,每一个数占用 4 个字节,显示字符串的时候,计算机会把每一个字节作为字符编码显示成对应的字符,这个时候,如果显示内容是字符串,当然是可以正常输出的,但是,如果把整型数当成字符串输出,那情况就可想而知了,因为这些整型数本身不是字符编码,被当成字符编码显示出来,我们拿肉眼看的时候,就会发现是一些没有任何意义的杂乱字符,难道楼主希望看到这样的东西?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 19:25:44 | 显示全部楼层
jackz007 发表于 2020-11-25 16:20
首先,字符串和整型数在计算机内存中都是数字,这一点,二者是一样的,其中,字符储存的是字符的编 ...

那怎么改,才能正常输出呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-25 21:04:21 | 显示全部楼层
#include <stdio.h>
main(void)
{
        int i , j ;
        char student[5][5]={{"小明"},{"小红"},{"小李"},{"小张"},{"小肖"}};
        int mark[5][5]={{85,78,93,68,76},{95,76,87,83,91},{78,69,83,79,83},{79,78,69,83,83},{91,89,78,88,85}};
        for(i = 0 ; i < 5 ; i ++)
        {
                if(i) printf(" , ")               ;
                printf("%s" , student[i])         ;
        }
        printf("\n")                              ;
        for(i = 0 ; i < 5 ; i ++)
        {
                for(j = 0 ; j < 5 ; j ++)
                {
                        if(j) printf(" , ")       ;
                        printf("%d" , mark[i][j]) ;
                }
                printf("\n")                      ;
        }
}
        编译、运行实况
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
小明 , 小红 , 小李 , 小张 , 小肖
85 , 78 , 93 , 68 , 76
95 , 76 , 87 , 83 , 91
78 , 69 , 83 , 79 , 83
79 , 78 , 69 , 83 , 83
91 , 89 , 78 , 88 , 85

D:\00.Excise\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 23:05:49 From FishC Mobile | 显示全部楼层
你好,你是用for语句循环嵌套来做,列和行两个循环。而我只是一个for行(应该是)循环,为什么我就输出不了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 23:06:46 From FishC Mobile | 显示全部楼层
%d,我应该是把整型数当作整行数来输出?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 23:07:25 From FishC Mobile | 显示全部楼层
型,行打错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 23:09:45 From FishC Mobile | 显示全部楼层
不是很理解“把整型数当做字符串来输出”,%d是整型没错呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-26 11:53:31 From FishC Mobile | 显示全部楼层
本帖最后由 18878977809 于 2020-11-26 11:54 编辑
jackz007 发表于 2020-11-25 21:04
编译、运行实况


这么理解对吗:
  字符串输出%s,是从首地址开始读读到反斜杠零结束。例如:i=0时,a[i]=a[0],数组名即首地址,则从第一行开始,一直读到反斜杠零结束。
  然后++i,i=1,a[i]=a[1],又从第二行开始,一直读到反斜杠零结束。然后在++i,又从第三行开始,一直读到反斜杠零结束。。。最后直至i不满足条件退出循环。
  而整型输出%d则不同,必须是二维数组a[2][3]这种。写成a[0]这种整形输出是不认得的,a[0]这种是字符串的输出。整形输出必须是写成二维数组的形式即a[2][3]的形式才行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-26 11:55:06 | 显示全部楼层    本楼为最佳答案   
18878977809 发表于 2020-11-26 11:53
这么理解对吗:
  字符串输出%s,是从首地址开始读读到反斜杠零结束。例如:i=0时,a=a[0],数组名即 ...

     基本上就是这个意思。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-26 16:22:15 From FishC Mobile | 显示全部楼层
jackz007 发表于 2020-11-26 11:55
基本上就是这个意思。

还有什么需要漏掉的吗的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-26 16:24:33 From FishC Mobile | 显示全部楼层
还有什么漏掉的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-26 16:26:44 From FishC Mobile | 显示全部楼层
jackz007 发表于 2020-11-25 21:04
编译、运行实况

%s的输出原理是从首地址开始读,一直读到反斜杠零结束。那%d的输出原理是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-26 17:42:13 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-26 17:43 编辑

        提交给 "%s" 的一定是一个内存地址,由 printf() 函数负责从这个地址开始向后逐字节读取编码并按照字符进行显示,直到遇到字符串结束标志 '\0';提交给 "%d" 的不能是地址,只能是一个现成的整数,printf() 只负责把这个数的值按照十进制输出,这就是区别。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 21:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表