C语言中scanf如果像一个%d的整型变量赋值一个字符或字符串有什么后果

EG:scanf("%d",&x);中如果输入一个字符串什么的,到底存的数据是什么?会发生什么?求解。不要乱答。... EG:scanf("%d",&x);中如果输入一个字符串什么的,到底存的数据是什么?会发生什么?求解。不要乱答。 展开
 我来答
金色潜鸟
推荐于2017-09-22 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5535万
展开全部
int n;
n = scanf("%d",&x);
if (n==1) printf("成功读入一个整型数 ");
else printf("我失败了,没读到数");

如果输入一个字符串什么的,存的数据是 %d 型 -- 因为这是你规定的 有格式 读的 格式。你还要用 函数的返回值判断,读成功了没有,读成功才收到 整型,没读成功 则 x里 没有东西。
例如, 输入字符串是 123AB, x 读到 123, 多余 AB 留在输入流中。
例如, 输入字符串是 AB123, 读语句失败, x 没读到东西。
最终幻想七复刻
2015-04-28 · 超过18用户采纳过TA的回答
知道答主
回答量:21
采纳率:0%
帮助的人:22万
展开全部
因为你指定了%d来读取一个整数,scanf()函数开始每次读取一个输入字符,它跳过空白字符(包含空格、制表符和换行符)直到遇到一个非空白字符,并期望发现一个数字字符或者一个符号(+或者-)。如果发现一个数字或符号,那么就保存并读取下一个字符;如果接下来的字符是一个数字,再保存,继续读取。如此持续直到遇到一个非数字字符,此时函数认为:已经读到了整数的末尾。scanf会将这个非数字字符放回输入缓冲区。这意味着:下一次程序开始读取输入时,仍将从这个非数字字符开始。如果你使用多个%d读取整数,但是你不小心在中间输入了非数字字符,那么除了非数字字符之前对应的变量外,后面的变量将不会被赋值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lajibaodu
2015-04-28 · TA获得超过1066个赞
知道小有建树答主
回答量:694
采纳率:100%
帮助的人:229万
展开全部
这个如果顺利读取到的话,字符进行ACS值转换~变成数字~
如果是字符串的话~有的编译器会读取第一个~有些就直接报错出现乱码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式