| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 14230 人关注过本帖
标题:scanf读入一行数据, 并将其中的数字录入数组问题
取消只看楼主 加入收藏
an你若成风
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-1-6
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:2 
scanf读入一行数据, 并将其中的数字录入数组问题
一个看似简单的实验(或许真的很简单), 输入一组数, 用空格(或多个空格)隔开, 并录入到一个数组里面:
程序代码:
#include <stdio.h>
#define MAXLENGTH 100000
int main()
{
    int dataBuffer[MAXLENGTH];
    int i = 0, ktest = 0, count = 0;
    while (scanf("%d", &dataBuffer[i++]))
    {
        if (getchar() == '\n')
            break;
    }
    count = i;
    ///////////////////////////////////////
    for (ktest = 0; ktest < count; ktest++)
    {
        printf("%d ", dataBuffer[ktest]);
    }
    printf("\n\n");
    ///////////////////////////////////////
    return 0;
}

比如我这输入
1 1 1 1 12 12

输出是没问题的,
但是如果我在后面加个空格就跪了
1 1 1 1 12 12 

光标到了下一行, 可以继续输入. 也就是说getchar()把后面的空格吸收了而不是'\n',
不是说scanf忽略所有空格TAB换行吗? 请问这里是否有理解问题,
那如果scanf仅仅是忽略空格TAB换行而不去吸收它,
这种情况源程序代码该如何修改? 实在是绞尽脑汁不得其解.

[此贴子已经被作者于2016-2-28 12:12编辑过]

搜索更多相关主题的帖子: color 
2016-02-28 12:11
an你若成风
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-1-6
收藏
得分:0 
回复 3楼 TonyDeng
是这样的, if嵌套在while循环中只是为了判断最后一个是不是换行符, 若是, 则退出循环(此时已经完成了'录入数据至数组这个动作')
比如我输入"1 2 3 4 5<Enter>", 单步调试很容易看出在最后getchar吸收了'\n', 且退出了循环, 但是如果我输入"1 2 3 4 5 <Enter>", 这时候光标就停在下一行行首, 等待输入, 这说明getchar没有吸收'\n', 而是"5"后面的空格, 这就是我纠结的地方.
后来想了想这么做无非就是一个"动态录入数组"模型, 首先我不知道数组元素总的有多少个, 比如上面例子是5个, 但我还可以输入更多, 这时候如果利用换行作为结束录入的指令, 那么摁下<Enter>之前是不应该有其他字符的.
总之这只是一个小实验, 有钻牛角尖之嫌, 我想不如读入整行作为字符串, 再写一个函数来"解析"这串字符串并录入数组, 这件事应该有意义得多.
2016-02-29 10:09
an你若成风
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-1-6
收藏
得分:0 
回复 6楼 TonyDeng
理解了,谢版主!
2016-02-29 11:12
快速回复:scanf读入一行数据, 并将其中的数字录入数组问题
数据加载中...
 
   



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

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