| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2526 人关注过本帖
标题:(c=getchar())为什么不能用scanf("%C",&C)或(c=scanf("%C",&C)) ...
只看楼主 加入收藏
chihuyu
Rank: 2
等 级:论坛游民
帖 子:70
专家分:13
注 册:2011-12-26
结帖率:100%
收藏
已结贴  问题点数:1 回复次数:6 
(c=getchar())为什么不能用scanf("%C",&C)或(c=scanf("%C",&C))
#include"stdio.h"
void main()
{
    int zongshu=0,zimushu=0,shuzishu=0,kongge=0;
    char c;

    while((c=getchar())!='\n')
    {
        zongshu+=1;
        
        if(c>='0'&&c<='9')
        {
            shuzishu+=1;
        }

        if(c>='A'&&c<'Z'||c>='a'&&c<='z')
        {
            zimushu+=1;
        }

        if(c==' ')
        {
            kongge+=1;
        }
    }

    printf("总数=%d\n数字数=%d\n字母数=%d\n空格数=%d\n",zongshu,shuzishu,zimushu,kongge);

}
以上程序当中的  (c=getchar())为什么不能用scanf("%C",&C)或(c=scanf("%C",&C))来代替,程序不能正常运行?
搜索更多相关主题的帖子: void 字母 include 
2012-01-26 20:03
tangtangt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:146
注 册:2012-1-22
收藏
得分:1 
我把循环条件写成这样while(scanf("%c",&c) && c!='\n'),vc6.0下程序可以运行的
至于c=scanf("%C",&C)这种写法应该是错的吧,没看到过scanf这样用的
2012-01-26 20:18
羲和
Rank: 2
等 级:论坛游民
帖 子:20
专家分:12
注 册:2011-7-7
收藏
得分:0 
借鉴好观点,希望能给你带来帮助
https://bbs.bccn.net/thread-55739-1-1.html
借鉴该贴第6楼:在scanf后面要按回车,这个回车是不接收的,但可能会影响你下次的输入,一般会在scanf后面接个getchar()来将这个回车接走

我仍然不解,本以为scanf不能将接收来的换行符赋至某个值,但是在下面的代码中输入  “1”  然后回车,输出的却是    “哈哈!哈哈!”    似乎有证明了scanf能将接收来的换行符赋至某个值,但循环依然不能终止   也得请大家来解一下这问题
程序代码:
# include <stdio.h>
void main()
{
    char c;

    while(scanf("%c", &c)!='\n')
    {
        printf("哈哈!");
    }
}

 
 
2012-01-26 22:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 3楼 羲和
亂來,以後遇到這種問題最好的做法是查書。scanf()函數的返回值是成功讀入的數據的數目。scanf("%d", &i)這樣的,需要讀入1個數據,如果成功,就返回1,不是你這樣輸入1來湊對返回的1,那是兩個不同意義的1。

授人以渔,不授人以鱼。
2012-01-26 23:45
羲和
Rank: 2
等 级:论坛游民
帖 子:20
专家分:12
注 册:2011-7-7
收藏
得分:0 
回复 4楼 TonyDeng
学习了
2012-01-27 12:04
chihuyu
Rank: 2
等 级:论坛游民
帖 子:70
专家分:13
注 册:2011-12-26
收藏
得分:0 
好像有点小难,学习了,感谢
2012-01-27 14:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
scanf()的返回值是成功匹配的數據項數。比如scanf("%d %d %d", &a, &b, &c)這個調用,如果3個數據項均成功讀入,那麼返回值為3,如果輸入有錯誤,在解析第三個數據項時沒有成功,那麼返回2,因為前面兩項讀成功了。如果a、b、c三項之中有一個被按下^Z(其實是只要遇到^Z),則返回EOF(-1),不管有多少個成功了。

實踐中,較為安全的scanf()使用法是一次讀入一項數據,儘量避免一次讀入多個數據。壇上很多人使用scanf()的代碼,都是傾向於一次讀入多個數據的,最離譜的一個人寫出一次讀入數十項,這分明是尋死唯恐找不著地兒的做法。

授人以渔,不授人以鱼。
2012-01-27 14:42
快速回复:(c=getchar())为什么不能用scanf("%C",&C)或(c=scanf("%C",&C)) ...
数据加载中...
 
   



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

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