| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 645 人关注过本帖
标题:麻烦帮个忙
只看楼主 加入收藏
a249426519
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-1-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
麻烦帮个忙
我想用char定义x,不想用int定义,但是在第二次循环时老是无法进行就直接进行,这是为什么?我用int定义时却没有出现这种情况
#include
int main(void)
{
    int i=1;
    double y;
    char x;
    while(i<=5)
    {
        printf("[1]apple\n[2]pear\n[3]orange\n[4]grape\n[0]exit\nEnter is your choice:");
        x=getchar();
        if(x=='0')
            break;
        switch(x)
        {
        case '1':y=3;
            break;
        case '2':y=2.5;
            break;
        case '3':y=4.1;
            break;
        case '4':y=10.2;
            break;
        default:y=0;
            break;
        }if(y!=0)
            printf("price=%.2f\n",y);
        else
            printf("Your enter isn't in here!\n");
        
        i++;
    }
    return 0;
}
搜索更多相关主题的帖子: void double choice 
2012-01-15 01:05
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
你知道getchar的用法吗?

总有那身价贱的人给作业贴回复完整的代码
2012-01-15 01:18
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:0 
用 char 定义,回车符也是有效输入,所以你必须在getchar 后面加一个fflush(stdin)或者getchar()。
2012-01-15 02:41
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:18 
#include                    // 头文件只有一半也行?tc2.0?
int main(void)
{
    int i=1;
    double y;
    char x;
    while(i<=5)
    {
        printf("[1]apple\n[2]pear\n[3]orange\n[4]grape\n[0]exit\nEnter is your choice:");
        x=getchar();  // 在这个后面加个fflush(stdin); 如果加上getchar();则达不到你的目的,因为你一次输入多个字符时就会产生混乱,你可以去试试。不过fflush(stdin);移植性不好。
        if(x=='0')
            break;
        switch(x)
        {
        case '1':y=3;
            break;
        case '2':y=2.5;
            break;
        case '3':y=4.1;
            break;
        case '4':y=10.2;
            break;
        default:y=0;
            break;
        }if(y!=0)
            printf("price=%.2f\n",y);
        else
            printf("Your enter isn't in here!\n");
        
        i++;
    }
    return 0;
}

x定义为char,使用getchar();只能得到输入的第一个字符,当输入10时程序认为x = 1而不是把10作为整体归入default类,所以是有点漏洞。

[ 本帖最后由 有容就大 于 2012-1-15 12:16 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-01-15 12:14
a249426519
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-1-13
收藏
得分:0 
回复 4楼 有容就大
#include/*这里我忘记打了不好意思*/
 int main(void)
 {
     int i=1;
     double y;
     char x;
     while(i<=5)
     {
         printf("[1]apple\n[2]pear\n[3]orange\n[4]grape\n[0]exit\nEnter is your choice:");
         x=getchar();/*这里我是打算一个字符一个字符输入,所以不影响,但是在我输入第一个字符后循环进行第二次输入时没有显示输入,而直接算入default所以导致程序错误*/
         if(x=='0')
             break;
         switch(x)
         {
         case '1':y=3;
             break;
         case '2':y=2.5;
             break;
         case '3':y=4.1;
             break;
         case '4':y=10.2;
             break;
         default:y=0;
             break;
         }if(y!=0)
             printf("price=%.2f\n",y);
         else
             printf("Your enter isn't in here!\n");
         
         i++;
     }
     return 0;
 }
2012-01-15 18:41
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 5楼 a249426519
x = getchar(); 等待输入。
你输入一个字符后回车,字符被赋予x后回车符保留在缓存,如果不采取措施就进入下一个循环后x = getchar();是先从缓存读数据,就读到了回车符,相当于default类所以出现输入一个字符回车出现两次循环的情况。
如果你还无法理解你把下面的代码去运行下。
#include <stdio.h>
#include <windows.h>
int main(void)
{
    int i=1;
    double y;
    char x;
    while(i<=5)
    {
        printf("[1]apple\n[2]pear\n[3]orange\n[4]grape\n[0]exit\nEnter is your choice:");
        x=getchar();
        Sleep(2000);  // 睡眠2秒  你输入1234回车看看效果
        if(x=='0')
            break;
        switch(x)
        {
        case '1':y=3;
            break;
        case '2':y=2.5;
            break;
        case '3':y=4.1;
            break;
        case '4':y=10.2;
            break;
        default:y=0;
            break;
        }if(y!=0)
            printf("price=%.2f\n",y);
        else
            printf("Your enter isn't in here!\n");
        
        i++;
    }
    return 0;
}

梅尚程荀
马谭杨奚







                                                       
2012-01-15 18:55
weipeng1217
Rank: 5Rank: 5
等 级:职业侠客
帖 子:175
专家分:386
注 册:2012-1-12
收藏
得分:2 
不知道下面这个是不是楼主想要的结果!
程序代码:
#include <stdio.h>

 int main(void)

 {
     int i=1;
     double y;
     char x;
     while(i<=5)
     {
         printf("[1]apple\n[2]pear\n[3]orange\n[4]grape\n[0]exit\nEnter is your choice:");
         x=getchar();
         getchar();
         if(x=='0')
             break;
         switch(x)
         {
         case '1':y=3;
             break;
         case '2':y=2.5;
             break;
         case '3':y=4.1;
             break;
         case '4':y=10.2;
             break;
         default:y=0;
             break;
         }
         if(y!=0)
         { printf("price=%.2f\n",y);
         return 0;}
         else
             printf("Your enter isn't in here!\n");
       
         i++;
     }
     return 0;

 } 



C坛友交流群 群号:161091913 ,欢迎经常在线的朋友加入,一起学习,一起进步。。
2012-01-15 18:55
a249426519
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-1-13
收藏
得分:0 
回复 7楼 weipeng1217
谢谢你的提议,虽然不是我要的代码,但是我知道哪里错了
2012-01-15 23:03
a249426519
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-1-13
收藏
得分:0 
回复 6楼 有容就大
谢谢,我懂了
2012-01-15 23:03
shixiaochi
Rank: 1
来 自:兰州
等 级:新手上路
帖 子:9
专家分:3
注 册:2012-1-16
收藏
得分:0 
i++;之后加一句 while (getchar != \n)
                          continue;
可以解决多输入以及不注意的回车输入
2012-01-16 02:51
快速回复:麻烦帮个忙
数据加载中...
 
   



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

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