鱼C论坛

 找回密码
 立即注册
查看: 4376|回复: 9

计算电阻的小程序出问题了

[复制链接]
发表于 2013-3-19 18:06:20 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 huaidisk 于 2013-3-20 14:56 编辑

首先感谢“小新110”的帮助。

然后更新一下程序,昨天的那个问题太多,各种声明变量出错。

由于VC++6.0不兼容win7,所以我用的是VS2010,头文件就变成了 #include "StdAfx.h"

这是一个计算2个电阻串并联后的阻值的小程序,并联时电阻不能同时为0。

现在的问题是,运行程序后,把阻值全输为0后,程序就直接跳出了,switch语句一点作用都没有,这到底是为什么。。

我的思路是:输入姓名,欢迎使用,先计算串联电阻阻值,再计算并联电阻阻值,判断是否为0,不是0,执行运算并输出结果,若是0,则通过switch语句询问是否重新输入,若输入Y,则重新输入阻值,若输入N,则跳至 loop ,结束程序。




  1. #include "StdAfx.h"
  2. #include<conio.h>

  3. void main()
  4. {
  5.         double r1 , r2 , pa ;
  6.         char name[10] ;
  7.         char a ;

  8.         printf("Hello, Please input your name:");
  9.         scanf("%s" , &name);
  10.         printf("Hi, %s, Welcome to use this programe!\n",name);

  11.         printf("Please input one resistor value:");
  12.         scanf("%lf" , &r1);
  13.         printf("Please input other resistor value:");
  14.         scanf("%lf" , &r2);

  15.         if( r1==0 && r2==0 )
  16.         {
  17.                 printf("Sorry, the resistance can not be both zero.\n");
  18.                 printf("If input again? (y/n)");
  19.                 scanf("%c" , &a);
  20.                 switch(a)
  21.                 {        case 'y':
  22.                                 printf("Please input one resistor value:");
  23.                                 scanf("%lf" , &r1);
  24.                                 printf("Please input other resistor value:");
  25.                                 scanf("%lf" , &r2);
  26.                                 break;
  27.                         case 'n':
  28.                                 goto loop;
  29.                                 break;
  30.                 }
  31.         }

  32.         pa = (r1*r2)/(r1+r2);
  33.         printf("The parallel value is %lf .\n" , pa);
  34.         printf("The series value is %lf .\n" , r1+r2);

  35. loop:

  36.         printf("\nThank you for using the program.");

  37.         getch();
  38. }

复制代码

最佳答案

查看完整内容

原来改了代码。要实现你的功能你还差了几步 首先scanf之前要清除缓冲,好像之前以前已经和你说了。 其次你要实现重复输入,没有循环怎么能行呢?所以要在switch外围加上个循环,当条件满足了再跳走。 修改代码:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-3-19 18:06:21 | 显示全部楼层
原来改了代码。要实现你的功能你还差了几步
首先scanf之前要清除缓冲,好像之前以前已经和你说了。
其次你要实现重复输入,没有循环怎么能行呢?所以要在switch外围加上个循环,当条件满足了再跳走。

修改代码:
  1. //#include "StdAfx.h"
  2. #include <stdio.h>
  3. #include<conio.h>

  4. void main()
  5. {
  6.         double r1 , r2 , pa ;
  7.         char name[10] ;
  8.         char a ;

  9.         printf("Hello, Please input your name:");
  10.         scanf("%s" , &name);
  11.         printf("Hi, %s, Welcome to use this programe!\n",name);

  12.         printf("Please input one resistor value:");
  13.         scanf("%lf" , &r1);
  14.         printf("Please input other resistor value:");
  15.         scanf("%lf" , &r2);

  16.         while(true)
  17.         {
  18.                 if( r1==0 && r2==0 )
  19.                 {
  20.                         printf("Sorry, the resistance can not be both zero.\n");
  21.                         printf("If input again? (y/n)");
  22.                         flushall();
  23.                         scanf("%c" , &a);
  24.                         switch(a)
  25.                         {        
  26.                         case 'y':
  27.                                 printf("Please input one resistor value:");
  28.                                 scanf("%lf" , &r1);
  29.                                 printf("Please input other resistor value:");
  30.                                 scanf("%lf" , &r2);
  31.                                 break;
  32.                         case 'n':
  33.                                 goto loop;
  34.                                 break;
  35.                         }
  36.                 }else
  37.                         break;

  38.         }       

  39.         pa = (r1*r2)/(r1+r2);
  40.         printf("The parallel value is %lf .\n" , pa);
  41.         printf("The series value is %lf .\n" , r1+r2);

  42. loop:

  43.         printf("\nThank you for using the program.");

  44.         getch();
  45. }
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-19 18:13:24 | 显示全部楼层
他复杂,帮顶,赚鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-19 18:56:07 | 显示全部楼层
两个地方有点问题:
1、第一个取名字的地方,用scanf的%c是不行的,%c只能取一个字符,起码要用%s,不过%s不能认空格,所以还是用gets比较好。
2、输出r1+r2的地方,r1、r2定义的是double型,所以输出要么用%lf要么强制转换,如:(int)(r1+rr2)
修改代码:
  1. #include <stdio.h>
  2. #include <conio.h>

  3. void main()
  4. {
  5.         double r1 = 0  , r2 = 0  , pa = 0  ;   //define 5 variables
  6.         char name[10] ;
  7.         char a = 0  ;

  8.         printf("Hello, Please input you name:");   //welcome user
  9.         //scanf("%s\n",&name);
  10.         gets(name);
  11.         printf("Hi, %s, Welcome to use this programe!\n",name);

  12. loop1:

  13.         printf("Please input one resistor value:");    //input values
  14.         scanf("%lf",&r1);
  15.         printf("Please input other resistor value:");
  16.         scanf("%lf",&r2);
  17.         printf("The series value is %d .\n",(int)(r1+r2));    //calculating series value
  18.         printf("The series value is %lf .\n",r1+r2);    //calculating series value

  19.         if(r1==0&r2==0)    //resistance can not be both zero
  20.         {
  21.                 printf("sorry, when resistance can be both 0 zero, ");
  22.                 printf("the parallel values can not calculate.\n");
  23.                 printf("if input again?(y/n)");

  24.                 if(a=='y')
  25.                         goto loop1;   //input again
  26.                 else
  27.                         goto loop2;   //end program
  28.         }
  29.         else
  30.         {
  31.                 pa = (r1+r2)/(r1*r2);   //Calculating parallel value
  32.                 printf("The parallel value is %d .\n",pa);
  33.         }

  34. loop2:

  35.         printf("Thank you for using the program.");

  36.         getch();
  37. }
复制代码
运行结果:
1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-20 00:10:45 | 显示全部楼层
本帖最后由 huaidisk 于 2013-3-20 00:15 编辑


改了之后,问题依旧,程序自动一口气执行到底。。我输完姓名后,依然什么也干不了,眼睁睁的看着程序自己执行完,还出现那么多的烫。。。
难道是VS2010出问题了。。

QQ截图20130320000955.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-20 09:12:31 | 显示全部楼层
你直接拷贝我的代码,应该没有问题的啊?
昨天我用的vs2008,今天用vs2010编译运行也一样没有问题啊?
要不这样,你在scanf之前调用flushall来清除一下缓冲试试。
代码: vs2010 控制台程序
  1. #include <stdio.h>
  2. #include <conio.h>

  3. void main()
  4. {
  5.         double r1 = 0  , r2 = 0  , pa = 0  ;   //define 5 variables
  6.         char name[10] ;
  7.         char a = 0  ;

  8.         printf("Hello, Please input you name:");   //welcome user
  9.         //scanf("%s\n",&name);
  10.         gets(name);
  11.         printf("Hi, %s, Welcome to use this programe!\n",name);

  12. loop1:

  13.         printf("Please input one resistor value:");    //input values
  14.         flushall();
  15.         scanf("%lf",&r1);
  16.         printf("Please input other resistor value:");
  17.         flushall();
  18.         scanf("%lf",&r2);
  19.         printf("The series value is %d .\n",(int)(r1+r2));    //calculating series value
  20.         printf("The series value is %lf .\n",r1+r2);    //calculating series value

  21.         if(r1==0&r2==0)    //resistance can not be both zero
  22.         {
  23.                 printf("sorry, when resistance can be both 0 zero, ");
  24.                 printf("the parallel values can not calculate.\n");
  25.                 printf("if input again?(y/n)");

  26.                 if(a=='y')
  27.                         goto loop1;   //input again
  28.                 else
  29.                         goto loop2;   //end program
  30.         }
  31.         else
  32.         {
  33.                 pa = (r1+r2)/(r1*r2);   //Calculating parallel value
  34.                 printf("The parallel value is %d .\n",pa);
  35.         }

  36. loop2:

  37.         printf("Thank you for using the program.");

  38.         getch();
  39. }
复制代码
运行结果:输入aaa后回车,输入12回车,输入12回车
1.jpg


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-20 13:35:00 | 显示全部楼层
本帖最后由 huaidisk 于 2013-3-20 13:37 编辑
小新110 发表于 2013-3-20 09:12
你直接拷贝我的代码,应该没有问题的啊?
昨天我用的vs2008,今天用vs2010编译运行也一样没有问题啊?
要 ...


你尝试的先输2个0,然后看看会不会有判断重新输入的语句。。我用你的代码是失败了,给我的感觉就是,if 里的代码永远为假。。。

QQ截图20130320133447.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-20 17:18:30 | 显示全部楼层
你是说 if(a=='y') ?晕死,你在这里根本就没有用scanf来接收输入。还有, if(r1==0&r2==0)    这一句要换成  if(r1==0&&r2==0)   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-3-20 21:55:24 | 显示全部楼层
。。。。。。。。。。。对我来说还是天书 学会再来看  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-20 22:03:41 | 显示全部楼层
小新110 发表于 2013-3-19 18:06
原来改了代码。要实现你的功能你还差了几步
首先scanf之前要清除缓冲,好像之前以前已经和你说了。
其次你 ...

再问几个小问题,为什么要在scanf之前清除缓冲啊?还有就是为什么实现重复输入需要循环啊。。最近才在看循环语句,逻辑还有点乱。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-4 01:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表