| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1220 人关注过本帖
标题:错误出在那里啊!
只看楼主 加入收藏
liuw_e_i
Rank: 2
等 级:论坛游民
帖 子:26
专家分:32
注 册:2010-3-27
收藏
得分:3 
如果你想用scanf("%c",&a);也可以,不过你必须调整一下它的位置:把它往前放~~

#include<stdio.h>
main()
{
  int  num1, demon1,num2,demon2,result_num,result_demon;
  char a;
  
  printf("Enter a character(+,-,*,/): ");
  scanf("%c",&a);
  
  printf("Enter first fraction: ");
  scanf("%d/%d",&num1,&demon1);

  printf("Enter second fraction: ");
  scanf("%d/%d",&num2,&demon2);

  switch(a)
    {
          case '+': result_num=num1*demon2+num2*demon1;
                    result_demon=demon1*demon2;
                    printf("The sum is %d/%d\n",result_num,result_demon);
                    break;
          case '-': result_num=num1*demon2-num2*demon1;
                    result_demon=demon1*demon2;
                    printf("The sum is %d/%d\n",result_num,result_demon);
                    break;
          case '*': result_num=num1*num2;
                    result_demon=demon1*demon2;
                    printf("The sum is %d/%d\n",result_num,result_demon);
                    break;
          case '/': result_num=num1*demon2;
                    result_demon=num2*demon1;
                    printf("The sum is %d/%d\n",result_num,result_demon);
                    break;
          default: printf("ERROR!\n");
                    break;
     }
}

自己试试吧!
2010-05-22 17:19
sunmingchun
Rank: 4
来 自:安徽-滁州
等 级:业余侠客
帖 子:198
专家分:277
注 册:2010-4-2
收藏
得分:0 
请教11楼 为什么放在下面就不对呢!还有为什么加了getchar()就行呢!
 
2010-05-22 18:09
liuw_e_i
Rank: 2
等 级:论坛游民
帖 子:26
专家分:32
注 册:2010-3-27
收藏
得分:3 
回复 12楼 sunmingchun
scanf("%c",&c);这句不能正常接收字符,什么原因呢?

    我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(\r),一个“换行"(\n),在这里\r被scanf()函数处理掉了(姑且这么认为吧^_^),而\n被scanf()函数“错误”地赋给了c.解决办法:可以在两个scanf()函数之后加个fflush(stdin);,还有加getch(); getchar();也可以,但是要视具体scanf()语句加那个,这里就不分析了,读者自己去摸索吧。但是加fflush(stdin);不管什么情况都可行。
函数名: fflush
功 能: 清除一个流
用 法: int fflush(FILE *stream);#include <stdio.h>
int main()
{
    int a;
    char c;   
    do
     {
        scanf("%d",&a);
        fflush(stdin);
        scanf("%c",&c);
        fflush(stdin);
        printf("a=%d c=%c\n",a,c);}while(c!='N');
}

    以上内容我也是在网上看到的~~~
2010-05-23 10:25
Dzhfield
Rank: 2
等 级:论坛游民
帖 子:12
专家分:37
注 册:2010-5-19
收藏
得分:4 

引用上面的,并加以解释:
#include<stdio.h>
int main(void)
{
    int  num1, demon1,num2,demon2,result_num,result_demon;
    char a;
   
    printf("Enter first fraction: ");
    scanf("%d/%d",&num1,&demon1);
   
    printf("Enter second fraction: ");
    scanf("%d/%d",&num2,&demon2);
   
    printf("Enter a character(+,-,*,/): ");
    getchar();      
    scanf("%c",&a);     

//首先你要明白
scanf函数并不是像直观上所理解的直接接受用户当前的输入作为所读取的数据(即我按一个键,它将这个键所对应的数据读取走);
实际上它所读取的是当前键盘缓存区中的数据;如果当前键盘缓存区不为空的话,它并不会读取当前的客户输入,而是将键盘缓存
区中所残留的上一次输入的数据(如你上一次输入数据后按下的回车键),若没有getchar();
底下的scanf("%c",&a);会想当然的
将这个回车字符送到变量a中后,就进行下一条语句了,也就是说,你不会看到scanf("%c",&a);的作用,即不用你输入数据。

另外,你也可以将getchar();语句换为fflush(stdin);语句。
fflush(stdin);
语句的作用:对键盘缓存区进行强制清空处理。

  OK? see?  真要不明白百度上搜“scanf”、“fflush”……
好好学习,天天向上!!!



    switch(a)
    {
    case '+': result_num=num1*demon2+num2*demon1;
        result_demon=demon1*demon2;
        printf("The sum is %d/%d\n",result_num,result_demon);
        break;
    case '-': result_num=num1*demon2-num2*demon1;
        result_demon=demon1*demon2;
        printf("The sum is %d/%d\n",result_num,result_demon);
        break;
    case '*': result_num=num1*num2;
        result_demon=demon1*demon2;
        printf("The sum is %d/%d\n",result_num,result_demon);
        break;
    case '/': result_num=num1*demon2;
        result_demon=num2*demon1;
        printf("The sum is %d/%d\n",result_num,result_demon);
        break;
    default: printf("ERROR!\n");
        break;
    }
   
    return 0;
}
2010-05-23 10:48
快速回复:错误出在那里啊!
数据加载中...
 
   



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

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