| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1987 人关注过本帖
标题:有详细了解我遇到的问题吗?麻烦讲解一下,谢哈。
取消只看楼主 加入收藏
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
有详细了解我遇到的问题吗?麻烦讲解一下,谢哈。
大家看看代码有错误吗?如果没有,能尝试一下以下输入:
2 回车 a 空格 1 空格 2 回车 b 空格 3 空格 4 回车
然后问题就出现了,但为何会有多出空字符的问题的呢?
有解困或的请来指正,谢谢!!
程序代码:
#include <stdio.h>

int main(int argc, char **argv)
{
    int b , c , n , i ;
    char a;
    scanf("%d",&n);
    for(i = 0 ; i < n ; i++){
        scanf("%c %d %d",&a,&b,&c);
        printf("%c %d %d\n",a,b,c);
    }
    return 0;
}

搜索更多相关主题的帖子: 讲解 回车 空格 int char 
2018-01-16 16:28
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
收藏
得分:0 
回复 2楼 吹水佬
问题是空白符哪里来?
按照代码来阅读,没有发现问题的出处。

其实把那个a类型改回%d,问题就消失了,但为何用%c就出问题了呢?

[此贴子已经被作者于2018-1-16 16:56编辑过]

2018-01-16 16:54
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
收藏
得分:0 
回复 5楼 吹水佬
但按照scanf保留空白符没读走的说法,以下代码却是正确的(唯一区别就是把a的char类型改回int类型,那个多出的空白字符就消失了)
所以困惑我的是为啥int处理没产生空白符而char的读会出现读漏的空白符。
程序代码:
#include <stdio.h>
int main(int argc, char **argv)
{
    int a , b , c , n , i ;
//    char a;
    scanf("%d",&n);
    for(i = 0 ; i < n ; i++){
        scanf("%d %d %d",&a,&b,&c);
        printf("%d %d %d\n",a,b,c);
    }
    return 0;
}


[此贴子已经被作者于2018-1-16 17:12编辑过]

2018-01-16 17:09
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
收藏
得分:0 
回复 8楼 虫眼
按照你的说的修改了一下程序:

程序代码:
#include <stdio.h>

int main(int argc, char **argv)
{
    int a , b , c , n , i ;
//    char a;
    scanf("%d",&n);
    printf("%d\n",getchar());
    for(i = 0 ; i < n ; i++){
        scanf("%d %d %d",&a,&b,&c);
        printf("%d\n",getchar()); //这里尝试看看有否输出相同的10,结果是有的,但循环到第二部的scanf却不受这个保留的空白符干扰,能正常读取,为啥呢?
        printf("%d %d %d\n",a,b,c);
    }
    return 0;
}
2018-01-16 17:56
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
收藏
得分:0 
好吧,我发现了scanf还有这个属性:
1. 读取的缓冲区里,读取类型前面的所有空白符会被抛弃,包括回车符。

以及忘记了一条重要的属性:
2. scanf读取会遇空白符则结束,但不会读走空白符(回车符一样)。注:读取数据为字符型除外。

因此我的程序在循环中,第二个scanf读取的第一个是%c,则让程序误认为那个回车符属于输入数据而读写到 char a 中,至于读取%d时,虽然依然在每次循环里scanf都会产生一个漏掉的回车符,不过在下一论scanf的时候会被读走并抛弃。

[此贴子已经被作者于2018-1-16 18:18编辑过]

2018-01-16 18:00
快速回复:有详细了解我遇到的问题吗?麻烦讲解一下,谢哈。
数据加载中...
 
   



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

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