| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 564 人关注过本帖
标题:感觉很神奇,变换一下得到的结果一样,但我想不出其中的原因
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
scanf()得到的任何字符串,都不会包括空白字符。所谓空白字符,是指空格、'\t'、'\n'等等字符。事实上,调用一次scanf("%s")只读入了"abcdef",留下后面的字符仍在输入缓冲区中待读,如果你再次调用scanf("%s"),它们才被读进来,你试试就知道了。scanf("%s")一次读一个单词,这是这个函数的典型特性,一定要注意。

授人以渔,不授人以鱼。
2012-12-23 18:59
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
#include<stdio.h>
#include<ctype.h>
int main()
{
    char str[100];
    int i;
    int a=0;             //判断字母函数
    printf("输一个字符串:\n");
    for(i=0;i<15;i++)
   scanf("%c",&str[i]);
    for(i=0;i<15;i++)
    {
        if(isalpha(str[i]))
            a+=1;
    }
    printf("字母有%d个\n",a);
    return 0;
图片附件: 游客没有浏览图片的权限,请 登录注册

版主,你再看看这种情况,我将本来的scanf()改为for(i=0;i<15;i++)  scanf("%c",&str[i]);然后将for语句后面的判断条件改为i<15;运行的时候,我就先输入“abc de4f”,然后我一共按了7次enter键,最后还能输出正确的结果哦,这个问题是不是很纠结?这能说明scanf能输入一个空格符号?但我也觉得有点奇怪,为什么要按了那么多次才有结果出来呢?没试过这种情况

思考赐予新生,时间在于定义
2012-12-23 20:42
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
如果我这样写,scanf("%s",str),这样如果有一个空格符号的话,空格符号后面的字符串肯定不会被列入了,如果我改为for(i=0;i<15;i++) scanf("%c",&str[i])来逐个输入字符的话,就比如输入“abc de4f”,这中间的空格符号应该也被输入字符组里面了吧,但运行的时候,却要按7次才会有结果出来,好郁闷

思考赐予新生,时间在于定义
2012-12-23 20:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
scanf("%c"),格式符是%c,这种情况下scanf()会把每一个字符都读进来,这是跟%s不同的行为。注意:scanf()是看格式约定符决定自己的行为,这是编这个函数的人的设计,不是C语言自身的——scanf()和printf()之类都不是语言自身的东西。

我前面说了,正确的结果是由isalpha()生成的,你总共输入7个alpha字符和1个空格符共8个字符放在输入缓冲区中,每次调用scanf("%c")函数只读走1个,连续调用了7次,所以被读入的字符依次是'a','b','c',' ','d','e','4'这样7个,isalpha()函数判断出有6个是alpha字符。缓冲区中还有1个'f'和1个'\n'。

授人以渔,不授人以鱼。
2012-12-23 20:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
本来不用敲那么多次回车的,输入好后,敲一次回车,for()循环自己会连续读15次%c,不知道你怎么弄出来要敲那么多次回车的。

授人以渔,不授人以鱼。
2012-12-23 21:01
快速回复:感觉很神奇,变换一下得到的结果一样,但我想不出其中的原因
数据加载中...
 
   



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

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