问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于C语言中 scanf prinf 的问题。

发布网友 发布时间:2022-04-28 12:51

我来回答

6个回答

热心网友 时间:2023-10-09 12:24

不太明白楼主的意思,但我想要说的是printf输出数组时只要遇到'\0'就结束输出;
还有
scanf("%s",a);
scanf(" %s",b);
假如你输入a后,回车,那么回车也算一个字符赋给了b[0],注意!追问我的意思就是如果定义数组为:a[3],b[4]。那么当我连续输入3个字符 再按空格键后 再连续输入4个字符。这时安enter键后,输出就有问题了。至于你说的回车也算一个字符,我在第二个scanf(" %s",b)中的%s前已经输入了一个空格键了。

追答空格也算一个字符,
scanf("%s",a);输入完成后,按键盘任意键都会赋值给b[0]
scanf(" %s",b);
解决办法
scanf("%s",a);
fflush(stdin);

scanf(" %s",b);

热心网友 时间:2023-10-09 12:24

/*会调试的话,你直接看内存便知。 ymj4645说的对。另外一则帮助你理解的代码,可以显示内存地址*/
#include<stdio.h>
int main()
{
char a[4];
char b[3];
scanf("%s",a);
scanf(" %s",b);

printf("[%#x]:%c\n",&a[0],a[0]);
printf("[%#x]:%c\n",&a[1],a[1]);
printf("[%#x]:%c\n",&a[2],a[2]);
printf("[%#x]:%c\n",&a[3],a[3]);

printf("[%#x]:%c\n",&b[0],b[0]);
printf("[%#x]:%c\n",&b[1],b[1]);
printf("[%#x]:%c\n",&b[2],b[2]);

printf("%s\n%s\n",a,b);
return 0;
}

热心网友 时间:2023-10-09 12:25

char a, b;
printf("value of a:");
scanf("%c", &a);
fflush(stdin);
printf("value of b:");
scanf("%c", &b);
输入a后,回车被认为是下一个字符,所有要清一下缓冲。

热心网友 时间:2023-10-09 12:25

很简单的一点可以告诉你
你输入第一个字符串的时候到ASC码的\0结束的,但是你依然录入了一个回车换行,这样下次输入的时候会把字符串记录在回车之后
而printf的规则是%s遇到\0就结束,所以第二次读取的时候读取到了一个\n
建议你到网上看一下scanf和printf的规则,你可以man 3 printf和man 3 scanf来查看规则,了解规则以及数据在内存上的分布你就会聊及你的程序出现的问题

热心网友 时间:2023-10-09 12:26

字符串需要以'\0'结束,注意。
比如char a[2];那么最多只能输入一个字符。
printf("%s"...
puts(...
都是以'\0'做打印结束标志

热心网友 时间:2023-10-09 12:27

ymj4645已说得明白。

热心网友 时间:2023-10-09 12:24

不太明白楼主的意思,但我想要说的是printf输出数组时只要遇到'\0'就结束输出;
还有
scanf("%s",a);
scanf(" %s",b);
假如你输入a后,回车,那么回车也算一个字符赋给了b[0],注意!追问我的意思就是如果定义数组为:a[3],b[4]。那么当我连续输入3个字符 再按空格键后 再连续输入4个字符。这时安enter键后,输出就有问题了。至于你说的回车也算一个字符,我在第二个scanf(" %s",b)中的%s前已经输入了一个空格键了。

追答空格也算一个字符,
scanf("%s",a);输入完成后,按键盘任意键都会赋值给b[0]
scanf(" %s",b);
解决办法
scanf("%s",a);
fflush(stdin);

scanf(" %s",b);

热心网友 时间:2023-10-09 12:24

/*会调试的话,你直接看内存便知。 ymj4645说的对。另外一则帮助你理解的代码,可以显示内存地址*/
#include<stdio.h>
int main()
{
char a[4];
char b[3];
scanf("%s",a);
scanf(" %s",b);

printf("[%#x]:%c\n",&a[0],a[0]);
printf("[%#x]:%c\n",&a[1],a[1]);
printf("[%#x]:%c\n",&a[2],a[2]);
printf("[%#x]:%c\n",&a[3],a[3]);

printf("[%#x]:%c\n",&b[0],b[0]);
printf("[%#x]:%c\n",&b[1],b[1]);
printf("[%#x]:%c\n",&b[2],b[2]);

printf("%s\n%s\n",a,b);
return 0;
}

热心网友 时间:2023-10-09 12:25

char a, b;
printf("value of a:");
scanf("%c", &a);
fflush(stdin);
printf("value of b:");
scanf("%c", &b);
输入a后,回车被认为是下一个字符,所有要清一下缓冲。

热心网友 时间:2023-10-09 12:25

很简单的一点可以告诉你
你输入第一个字符串的时候到ASC码的\0结束的,但是你依然录入了一个回车换行,这样下次输入的时候会把字符串记录在回车之后
而printf的规则是%s遇到\0就结束,所以第二次读取的时候读取到了一个\n
建议你到网上看一下scanf和printf的规则,你可以man 3 printf和man 3 scanf来查看规则,了解规则以及数据在内存上的分布你就会聊及你的程序出现的问题

热心网友 时间:2023-10-09 12:26

字符串需要以'\0'结束,注意。
比如char a[2];那么最多只能输入一个字符。
printf("%s"...
puts(...
都是以'\0'做打印结束标志

热心网友 时间:2023-10-09 12:27

ymj4645已说得明白。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
帮忙介绍几个昆山好吃的地方 ...古代文学论述题——举例说明庄子散文的特点。谢谢(⊙o⊙)哦知 ... 天津滨海职业大学智能制造装备技术学什么 智能制造装备技术专业就业方向有哪些 智能制造装备技术专业主要学什么 公孙衍人物故事 吹奏乐器巴乌 巴乌简介 倒库要打转向灯 倒车入库要开转向灯吗 C语言计算一元二次方程结果一直为-inf,不知道是哪里出错了,求大神解答 大虾们谁能告文件名后缀都是什么意思啊,比如.obj .lib .make .a... 看了c语言基础有些名词不懂,希望能通俗一点解释 c语言程序运行结果为什么出现1.#INF00? c语言中输出1.#jhbhb表示什么意思 C语言或C++中 long long INF=1LL&lt;&lt;60的含义? #define INF 32767 什么意思 为什么是32767,不是其它的数 c语言对变量赋值结果为inf。b数组第二个元素inf 是什么意思 c语言中mincost=INF是什么意思 如何区分拍违章的摄像头啊?? 单行道,路上这种摄像头是拍违停,还是拍逆行?? 便签记账为什么出现一笔账记两次? 哪种摄像头拍违停 vivo钱包怎么把记账移至便签里面? vivo便签记账在设置中哪里开启 opporen4pro便签记账怎么使用? oppo09ks便签记账功能在哪里 vivo x30标签记账怎么用? 百乐满屋外式燃气热水器可否用液化气罐 百乐满热水器维修方法介绍 C语言运行结果中出现“1.#INF00”,为什么? C语言函数 fprinf和prinf的区别?分别什么用? C语言中对于prinf,scanf两个函数头文件的包含命令#include&lt;stdio.h&gt;其中? c语言关键字 C程序、printf里的%d、%f等等是什么意思 C语言中输出1INFOO是怎样回事如题 谢谢了 农商行上市 老北京焖酥鱼的正宗做法是怎样的?需要掌握哪些要领? 北方焖酥鱼的做法 纸上怎么种菜? 怎么在一张纸上种菜? 如何在纸上种菜? 能在纸上种菜的原理 如何在纸上种菜 纸上种菜新手步骤 现实中!如何纸上种菜,求具体步骤! 听说在纸上可以种菜,我想种点豌豆,请问要怎么种呢? 纸上种菜的危害? 能不能在纸上种菜。 纸上种菜只能采收一茬吧?因为它靠的是种子本身贮藏的营养物质,等种子里的营养输出完了,芽苗的生命也就