为什么char %s就可以??
#include<stdio.h>int main()
{
int a;
printf("输入");
scanf("%d",a);
printf("%d\n",a);
return 0;
} 这个你就得从 scanf的用法看起。百度找下 scanf scanf那一行应该有错吧 scanf("%d",&a); 本帖最后由 major_lyu 于 2020-2-16 14:05 编辑
你的问题每太看懂。
没看到char %s在哪
感觉你目前的代码是可以编译通过的。
scanf读入数据的目标变量必须为地址类型(指针)。
int a;定义a是一个数组,因此a表示数组的首地址,即a, &a是一个意思。
所以这种情况下scanf("%d",a)的作用和scanf(”%d“, &a)的意思是一样的,即将读入的数据存放到数组第一个元素。
而如果定义int a;
那么必须写成scanf("%d",&a)。&a表示的是变量a的地址。
另外;printf("%d\n", a);这一行应该是有问题的。输出结果应该是数组a的地址,而不是a的数据。
要想输出数组第一个元素的数据,必须用printf("%d\n", a);或者printf("%d\n", *a);
最后,我猜你想问的是为什么下面的代码可以正确输出a的第一个元素。
#include<stdio.h>
int main()
{
char a;
printf("输入");
scanf("%c",a);
printf("%s\n",a);
return 0;
}
这就要涉及到字符数组和字符串的关系了。在C语言中,可以简单的认为字符数组和字符串是一样的。字符数组char a相当于定义也一个长度为123的字符串,知识字符串中的数据没有初始化,a既表示字符数组名,字符数组地址也表示字符串a。
printf("%s\n",a);将字符数组a中的数据按照字符串的形式输出,当然是可以的了。
major_lyu 发表于 2020-2-16 13:47
你的问题每太看懂。
没看到char %s在哪
感谢你的耐心回复
我说char %s是这样子,就能正常输出 而换成int就输出其他数字 你说的东西我也会看一下,我还是刚刚学计算机,希望多包容
#include<stdio.h>
int main()
{
char a;
printf("输入");
scanf("%s", a);
printf("%s\n", a);
return 0;
}
本帖最后由 major_lyu 于 2020-2-16 21:39 编辑
kajun 发表于 2020-2-16 15:52
感谢你的耐心回复
我说char %s是这样子,就能正常输出 而换成int就输出其他数字 你说的东西我也会看一 ...
char a是字符数组,可以按照字符串输出。scanf("%s",a)是以字符串形式读入,本质上是将输入字符的ASCII码写入到字符数组a中,并且系统会自动在你输入的最后一个字符之后增加一个’\0',表示字符串终止。比如你输入的是123, 那么数组a的前三个元素分别是字符’1‘’2‘’3‘的ASCII码,即十进制数的49,50,51,第四个元素为‘\0', 即二进制的00000000。你用printf("%s",a)输出时,就会将字符数组当作字符串输出所有字符。需要注意的是,作为字符串输出时碰到字符‘\0',就会认为字符串结束,停止输出后面的字符。
而int a是整型数组。scanf("%d", a)只能读入一个整形数据,并将数据存储到a中,例如你输入的是123,则数组a的第一个元素会被改写成123。
这时你如果用printf("%s",a)输出,输出的第一个字符应该是ASCII码对应的字符’{‘.
如果用printf("%d", a)输出,输出的应该是一串数组,这个数字实际上是数组a第一个元素在内存的位置编号,也就是地址。
你可以用下面的代码验证一下:
#include<stdio.h>
int main()
{
char b;
int a;
printf("输入a:\n");
scanf("%d", a); //假设输入123
printf("%s\n", a); //以字符串形式打印数组a的值,------------------输出:{
printf("%d\n", a); //十进制形式打印数组a第0个元素地址------------输出:某个地址数据XXXXXXXX
printf("%d\n", &a); //十进制形式打印数组a第0个元素地址------------输出:XXXXXXXX
printf("%d\n", &a); //十进制形式打印数组a第0个元素地址------------输出:XXXXXXXX
printf("%d\n", a); //十进制形式打印数组a第0个元素a的值-----输出:123
printf("输入b:\n");
scanf("%s", b);//假设输入123
printf("%s\n", b); //以字符串形式打印字符数组------------------输出:123
printf("%d\n", b);//十进制形式打印数组b第0个元素地址------------输出:某个地址数据YYYYYYYY
printf("%d\n", &b);//十进制形式打印数组b第0个元素地址------------输出:YYYYYYYY
printf("%d\n", &b);//十进制形式打印数组b第0个元素地址------------输出:YYYYYYYY
printf("%d\n", b);//十进制形式输出字符数组b第0元素b的ASCII码----输出:49;
return 0;
}
页:
[1]