| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 23163 人关注过本帖
标题:字符输入和字符串输入的区别
只看楼主 加入收藏
zsf1125
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2012-10-19
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
字符输入和字符串输入的区别
#include<stdio.h>
int main()
{
    int n,m;
    char ch,c;
    do{
        printf("请输入一个三位整数:");
        scanf("%d",&n);
        if(n>99 && n<1000){
            m=(n%10)*100 + ((n/10)%10)*10 + (n/100);
            printf("%d\n",m);
        }
        else
            printf("超出范围!!!输入错误\n");        
        printf("是否继续输入Y/N:\n");
           scanf("%s",&ch);
        
        }while(ch=='y' || ch == 'Y');
    return 0;
}

这个程序能够正常的运行,但是如果把scanf("%s",&ch);改为scanf("%c",&ch);就不能够循环,为什么,求解!!!
搜索更多相关主题的帖子: 字符串 include return 
2012-10-19 20:45
菜鸟一支
Rank: 6Rank: 6
来 自:何美杭
等 级:侠之大者
威 望:1
帖 子:121
专家分:456
注 册:2012-10-10
收藏
得分:4 
%s是输入字符串,%c是输入单个字符。
在%c情况下,
当输入123后,楼主会敲击回车,这个时候,回车就相当于一个字符,再执行 scanf("%s",&ch);这时就把\n赋值给了ch;再判断while(ch=='y' || ch == 'Y');
显然不成立,故而导致循环结束。
楼主可以把while(ch=='y' || ch == 'Y');改成:while(ch=='\n' || ch == 'Y');试试就知道原因了

小弟何美杭,所发表的都仅代表个人观点,欢迎批评指正。
2012-10-19 22:00
JON_me
Rank: 2
等 级:论坛游民
帖 子:30
专家分:68
注 册:2012-5-4
收藏
得分:2 
顶二楼,不止在这一个语言中·······

因为爱情,不会轻易悲伤······
2012-10-19 22:02
zsf1125
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2012-10-19
收藏
得分:0 
但是我运行的结果是:
用%c:
图片附件: 游客没有浏览图片的权限,请 登录注册


然后我改为%s之后:
图片附件: 游客没有浏览图片的权限,请 登录注册

我不知道该如何理解,请教……
2012-10-19 22:09
神之右手
Rank: 2
等 级:论坛游民
威 望:1
帖 子:40
专家分:79
注 册:2012-10-16
收藏
得分:10 
    有必要先解释一下函数scanf()中“%s”和“%c”的区别:

   %s:输入字符串,遇到第一个空白字符(包括回车,空格,制表符)时结束;
   %c:输入一个字符,空白字符(包括回车,空格,制表符)也作为有效字符输入;

    当此程序中是scanf("%c",&ch);时,执行一遍后不等你输入立马退出循环,原因就是变量ch中已经有值了,而且是系统给的“空白字符”,正好%c满足“空白字符也作为有效字符输入”这一规定,所以(ch=='y' || ch == 'Y')这一条件不满足,自然退出循环!
    当此程序中是scanf("%s",&ch);时,系统给的“空白字符”不影响(再没输入任何字符的情况下忽略会空白字符)变量ch,直到你输完要输的字符后才以空白字符作为结束标志,所以此时变量ch中存的值才是你所输入的!

    其实输入单个字符最好用getchar()语句!以后注意细节,大家相互学习!!!





As I do,as you know!
2012-10-19 22:15
w675182057
Rank: 2
等 级:论坛游民
帖 子:14
专家分:31
注 册:2012-10-14
收藏
得分:4 
程序代码:
#include<stdio.h>
int main()
{
    int n,m;
    char ch,c;
    do{
        printf("请输入一个三位整数:");
        scanf("%d",&n);
        if(n>99 && n<1000){
            m=(n%10)*100 + ((n/10)%10)*10 + (n/100);
            printf("%d\n",m);
        }
        else
            printf("超出范围!!!输入错误\n");      
        printf("是否继续输入Y/N:\n");
        c=getchar();
        scanf("%c",&ch);
        }while(ch=='y' || ch == 'Y');
    return 0;
}
2012-10-19 22:16
w675182057
Rank: 2
等 级:论坛游民
帖 子:14
专家分:31
注 册:2012-10-14
收藏
得分:0 
程序代码:
#include
int main()
{
    int n,m;
    char ch,c;
    do{
        printf("请输入一个三位整数:");
        scanf("%d",&n);
        if(n>99 && n<1000){
            m=(n%10)*100 + ((n/10)%10)*10 + (n/100);
            printf("%d\n",m);
        }
        else
            printf("超出范围!!!输入错误\n");      
        printf("是否继续输入Y/N:\n");
        c=getchar();
        scanf("%c",&ch);
        }while(ch=='y' || ch == 'Y');
    return 0;
}
2012-10-19 22:16
w675182057
Rank: 2
等 级:论坛游民
帖 子:14
专家分:31
注 册:2012-10-14
收藏
得分:0 
我也不知道为什么把getchar()放到前面就对了;我同学说是输入流给出的'\n'!
2012-10-19 22:18
神之右手
Rank: 2
等 级:论坛游民
威 望:1
帖 子:40
专家分:79
注 册:2012-10-16
收藏
得分:0 
以下是引用菜鸟一支在2012-10-19 22:00:03的发言:

%s是输入字符串,%c是输入单个字符。
在%c情况下,
当输入123后,楼主会敲击回车,这个时候,回车就相当于一个字符,再执行 scanf("%s",&ch);这时就把\n赋值给了ch;再判断while(ch=='y' || ch == 'Y');
显然不成立,故而导致循环结束。
楼主可以把while(ch=='y' || ch == 'Y');改成:while(ch=='\n' || ch == 'Y');试试就知道原因了
2楼所说的这个也不合适,按你这个改法永远退不出循环!再者输入123后按回车“\n”并没有存储在ch中,因为下句执行的并非scanf(),而是printf()!我认为之所以退出是因为系统给了某种空白字符,很可能是printf()函数本身带的空白字符,制表符可能性最大,毕竟printf()是显示函数嘛,为了美观也能理解。。。。。

As I do,as you know!
2012-10-19 22:22
神之右手
Rank: 2
等 级:论坛游民
威 望:1
帖 子:40
专家分:79
注 册:2012-10-16
收藏
得分:0 
回复 9楼 神之右手
getchar()这个函数只是单纯的记录你键盘输入的字符,与空白字符无关,自然就对了。。。。。

As I do,as you know!
2012-10-19 22:26
快速回复:字符输入和字符串输入的区别
数据加载中...
 
   



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

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