二维数组输出与输入
为什么字符数组用一个s就可以正确输出,代码如下:#include <stdio.h>
#include <windows.h>
void main(){
int i;
char s={"学","习","编","程","语","言"};
for(i=0;i<6;i++)
{
printf("%s",s);
Sleep(1000);
}
}//
而整型数组用一个s,输出却是错的呢?
#include<stdio.h>
void main()
{
int i;
char student={{"小明"},{"小红"},{"小李"},{"小张"},{"小肖"}};
int mark={{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);
}
}
求一个大佬 首先,字符串和整型数在计算机内存中都是数字,这一点,二者是一样的,其中,字符储存的是字符的编码数值,而整型数储存的就是整型数本身,对于 ASCII 字符而言,每个字符占用一个字节,对于整型数而言,每一个数占用 4 个字节,显示字符串的时候,计算机会把每一个字节作为字符编码显示成对应的字符,这个时候,如果显示内容是字符串,当然是可以正常输出的,但是,如果把整型数当成字符串输出,那情况就可想而知了,因为这些整型数本身不是字符编码,被当成字符编码显示出来,我们拿肉眼看的时候,就会发现是一些没有任何意义的杂乱字符,难道楼主希望看到这样的东西? jackz007 发表于 2020-11-25 16:20
首先,字符串和整型数在计算机内存中都是数字,这一点,二者是一样的,其中,字符储存的是字符的编 ...
那怎么改,才能正常输出呢?
#include <stdio.h>
main(void)
{
int i , j ;
char student={{"小明"},{"小红"},{"小李"},{"小张"},{"小肖"}};
int mark={{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) ;
}
printf("\n") ;
for(i = 0 ; i < 5 ; i ++)
{
for(j = 0 ; j < 5 ; j ++)
{
if(j) printf(" , ") ;
printf("%d" , mark) ;
}
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> 你好,你是用for语句循环嵌套来做,列和行两个循环。而我只是一个for行(应该是)循环,为什么我就输出不了呢 %d,我应该是把整型数当作整行数来输出? 型,行打错了 不是很理解“把整型数当做字符串来输出”,%d是整型没错呀? 本帖最后由 18878977809 于 2020-11-26 11:54 编辑
jackz007 发表于 2020-11-25 21:04
编译、运行实况
这么理解对吗:
字符串输出%s,是从首地址开始读读到反斜杠零结束。例如:i=0时,a=a,数组名即首地址,则从第一行开始,一直读到反斜杠零结束。
然后++i,i=1,a=a,又从第二行开始,一直读到反斜杠零结束。然后在++i,又从第三行开始,一直读到反斜杠零结束。。。最后直至i不满足条件退出循环。
而整型输出%d则不同,必须是二维数组a这种。写成a这种整形输出是不认得的,a这种是字符串的输出。整形输出必须是写成二维数组的形式即a的形式才行 18878977809 发表于 2020-11-26 11:53
这么理解对吗:
字符串输出%s,是从首地址开始读读到反斜杠零结束。例如:i=0时,a=a,数组名即 ...
基本上就是这个意思。 jackz007 发表于 2020-11-26 11:55
基本上就是这个意思。
还有什么需要漏掉的吗的吗 还有什么漏掉的吗 jackz007 发表于 2020-11-25 21:04
编译、运行实况
%s的输出原理是从首地址开始读,一直读到反斜杠零结束。那%d的输出原理是什么? 本帖最后由 jackz007 于 2020-11-26 17:43 编辑
提交给 "%s" 的一定是一个内存地址,由 printf() 函数负责从这个地址开始向后逐字节读取编码并按照字符进行显示,直到遇到字符串结束标志 '\0';提交给 "%d" 的不能是地址,只能是一个现成的整数,printf() 只负责把这个数的值按照十进制输出,这就是区别。
页:
[1]