| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 485 人关注过本帖
标题:有关 scanf()函数的问题
只看楼主 加入收藏
chrisgardner
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:73
专家分:114
注 册:2013-9-25
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
有关 scanf()函数的问题
程序代码:
#include <stdio.h>
int main(void)
{
    int i = 0;
    int j = 0;
    int k = 0;

    scanf_s("%d\n%d\n%d", &i, &j, &k, 3);
    printf("%d, %d, %d\n", i, j, k);

    //scanf_s("%d\n", &i, 1);
    //printf("%d\n", i);
    return 0;
}


我想请问一下,为什么第一个scanf_s()中输入3个数时,要敲入 空格 或 回车 才可以正确存储,如果在3个数字中插入两个‘\n’,那么仅能存储第一个数字,其他没有被存储,还是初始化时的值。
但是第二个scanf_s()中,输入一个数字后为什么必须要输入‘\n’再敲 回车 才能存储?

看《C语言入门经典》到第10章,发现细节太多,看的比前面任何一章都辛苦,进度很慢,想请问一下图片中划线部分到底什么意思?说好的可以忽略空白字符,那为什么第二个scanf_s()中的 \n 没有被忽略?
图片附件: 游客没有浏览图片的权限,请 登录注册
2014-05-22 15:54
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:7 
注意红线部分: 在格式控制字符串中添加一个或多个空白字符,如空格'',制表符'\t'或换行符'\n',scanf()会忽略空白字符,直接读入输入中的下一个非空白字符.
看你的代码
scanf_s("%d\n%d\n%d", &i, &j, &k, 3);


你的格式控制中加入了换行符'\n', 因此在输入的时候,你需要在两个整数间添加空格或者回车以便把你输入的数字送入缓冲区供程序读入.

你在格式控制中用的什么格式,在输入的时候就应该保持和你设定的格式完全一样才行,否则scanf()会出错. 如果使用scanf()的返回值,将很容易发现这个错误.

比如你设定的是scanf_s("%d%d%d", &i, &j, &k, 3),那么你输入的时候,输入'123'就能够返回正确结果,如果输入'1,2,3',则会出现错误.

你输入的东西应该与"%d\n%d\n%d"保持一致, 如果你连续输入三个数字,那么第一个可以正常存储,第二个字符如果不是空格或者回车,scanf()函数就认为发生了错误,就停止读入.

代码测试环境:  WinXP+C-Free5.0.
2014-05-22 18:37
黑色的蚊子
Rank: 2
等 级:论坛游民
帖 子:20
专家分:17
注 册:2014-5-17
收藏
得分:7 
用换行符或其他的目的是为了不让计算机将原本想输出输出都是三个的数据而变成了一个数据输出,它与字符中的/0 含义很相似。
2014-05-26 10:39
快速回复:有关 scanf()函数的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027638 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved