| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 14217 人关注过本帖
标题:scanf读入一行数据, 并将其中的数字录入数组问题
只看楼主 加入收藏
an你若成风
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-1-6
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
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
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
此问题不好解答,我也搞不懂,不要拘泥于此。

   唯实惟新 至诚致志
2016-02-28 18:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你解釋一下把if放在while裏面是什麽意思?

授人以渔,不授人以鱼。
2016-02-28 22:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
學會調試,你自己跟蹤一下,可以運行的時候,循環是不是經break語句退出的?

授人以渔,不授人以鱼。
2016-02-29 00:02
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
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
while(scanf())這樣的條件,是當scanf()返回非零時進入循環,而scanf()的返回値是成功讀入數據的數目,非零,表明它讀入了一個整數,換言之,你循環裏面的if祇有在scanf()真的讀到整數之後才能判斷,你是測試動作,既然讀不到數據,還怎麽可能依靠if來跳出循環,它當然一直在等待後續輸入了,這是邏輯錯誤。

授人以渔,不授人以鱼。
2016-02-29 10:16
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.023271 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved