佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 956|回复: 6

学生问题

[复制链接]
发表于 8-2-2010 11:31 PM | 显示全部楼层 |阅读模式
本帖最后由 卖女孩滴小火柴 于 8-2-2010 11:36 PM 编辑

希望有空的可以帮帮我解决 还是新手 是个功课
问题是在case 4的binSubt()的function 当我call它的时候没反应 只是output 0
如果把binSubt()里code copy去别的地方就可以有我要的output
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <string.h>

  4. void decToBin()
  5. {
  6.         int i,input,output;
  7.         printf("Enter a decimal number from 0-255\n");
  8.         scanf_s("%d",&input);
  9.         for(i=7;i>=0;i--)
  10.         {
  11.                 output=input/(1<<i);
  12.                 input=input-output*(1<<i);
  13.                 printf("%d",output);
  14.         }
  15.         printf("\n");
  16. }

  17. void binToDec()
  18. {
  19.         int i,j,k,output,cnt,input,temp;
  20.         do
  21.         {
  22.                 k=0,output=0,j=1,i=0,cnt=0;
  23.                 printf("Enter a binary number: ");
  24.                 scanf_s("%d",&input);
  25.                 if(input<0)
  26.                         k=1;
  27.                         temp=input;
  28.                         while(temp)
  29.                         {
  30.                                 i=temp%10;
  31.                                 cnt++;
  32.                                 if(i>1||cnt>10)
  33.                                 {
  34.                                         k=1;
  35.                                 break;
  36.                                 }
  37.                                 output+=i*j;
  38.                                 j=j*2;
  39.                                 temp/=10;
  40.                         }
  41.         }
  42.         while(k==1||output==0);
  43.         printf("%d\n",output);
  44. }

  45. int binAdd1()
  46. {
  47.         int i,j,k,output,cnt,input,temp;
  48.         do
  49.         {
  50.                 k=0,output=0,j=1,i=0,cnt=0;
  51.                 printf("Enter 1st binary number: ");
  52.                 scanf_s("%d",&input);
  53.                 if(input<0)
  54.                         k=1;
  55.                         temp=input;
  56.                         while(temp)
  57.                         {
  58.                                 i=temp%10;
  59.                                 cnt++;
  60.                                 if(i>1||cnt>10)
  61.                                 {
  62.                                         k=1;
  63.                                 break;
  64.                                 }
  65.                                 output+=i*j;
  66.                                 j=j*2;
  67.                                 temp/=10;
  68.                         }
  69.         }
  70.         while(k==1||output==0);
  71.         return(output);
  72. }

  73. int binAdd2()
  74. {
  75.         int i,j,k,output,cnt,input,temp;
  76.         do
  77.         {
  78.                 k=0,output=0,j=1,i=0,cnt=0;
  79.                 printf("Enter 2nd binary number: ");
  80.                 scanf_s("%d",&input);
  81.                 if(input<0)
  82.                         k=1;
  83.                         temp=input;
  84.                         while(temp)
  85.                         {
  86.                                 i=temp%10;
  87.                                 cnt++;
  88.                                 if(i>1||cnt>10)
  89.                                 {
  90.                                         k=1;
  91.                                 break;
  92.                                 }
  93.                                 output+=i*j;
  94.                                 j=j*2;
  95.                                 temp/=10;
  96.                         }
  97.         }
  98.         while(k==1||output==0);
  99.         return(output);
  100. }

  101. void binSubt()
  102. {
  103.         char str[20];
  104.         int i,count1=0;
  105.         printf("Enter name: ");
  106.         gets(str);
  107.         printf("%s",str);
  108.         for(i=0;i<=20;i++)
  109.         {
  110.                 if(str[i]!='\0')
  111.                 {
  112.                         count1++;
  113.                 }
  114.                 else
  115.                 {
  116.                         break;
  117.                 }
  118.         }
  119.         printf("%d",count1);
  120. }

  121. void main()
  122. {
  123.         int choice,choice1,choice2,choice3,ans1,ans2,total,i,output1;
  124.         char str[20];
  125.         do
  126.         {
  127.                 printf("Select Menu\n");
  128.                 printf("1.        Conversions\n");
  129.                 printf("2.        Matrix Maths\n");
  130.                 printf("3.        String Functions\n");
  131.                 printf("4.        Exit\n");
  132.                 scanf_s("%d",&choice);
  133.                 switch(choice)
  134.                 {
  135.                         case 1:
  136.                                 printf("Conversions\n");
  137.                                 printf("1.        Decimal to Binary\n");
  138.                                 printf("2.        Binary to Decimal\n");
  139.                                 printf("3.        Binary Addition\n");
  140.                                 printf("4.        Binary Subtraction\n");
  141.                                 scanf_s("%d",&choice1);
  142.                                 switch(choice1)
  143.                                 {
  144.                                         case 1:
  145.                                                 decToBin();
  146.                                                 break;
  147.                                         case 2:
  148.                                                 binToDec();
  149.                                                 break;
  150.                                         case 3:
  151.                                                 ans1=binAdd1();
  152.                                                 ans2=binAdd2();
  153.                                                 total=ans1+ans2;
  154.                                                 for(i=7;i>=0;i--)
  155.                                                 {
  156.                                                         output1=total/(1<<i);
  157.                                                         total=total-output1*(1<<i);
  158.                                                         printf("%d",output1);
  159.                                                 }
  160.                                                 printf("\n");
  161.                                                 break;
  162.                                         case 4:
  163.                                                 binSubt();
  164.                                                 break;
  165.                                 }
  166.                                 continue;
  167.                 }
  168.                 break;
  169.         }
  170.         while(choice!=4);
  171. }
复制代码
回复

使用道具 举报


ADVERTISEMENT

发表于 9-2-2010 12:21 AM | 显示全部楼层
用 fgets 比较好,防止buffer overflow:

把line 111 换成 fgets(str, sizeof(str), stdin); 就可以了!

原因是line 147 的 scanf 会 ignore"\n",所以"\n"会成为gets的input, output 0是字串的长度
回复

使用道具 举报

 楼主| 发表于 9-2-2010 12:33 AM | 显示全部楼层
用 fgets 比较好,防止buffer overflow:

把line 111 换成 fgets(str, sizeof(str), stdin); 就可以了! ...
ak1985 发表于 9-2-2010 12:21 AM


我换了 但还是不能让我input, 而且output也没有东西
回复

使用道具 举报

发表于 9-2-2010 03:32 PM | 显示全部楼层
本帖最后由 ak1985 于 9-2-2010 03:33 PM 编辑

回复 3# 卖女孩滴小火柴

add the following in line 110:

fgets(str, sizeof(str), stdin); // Consume the "\n"

line 111:
fgets(str, sizeof(str), stdin);
回复

使用道具 举报

发表于 9-2-2010 10:46 PM | 显示全部楼层
这是 C#?
抱歉。。。。只会 java 不会 C
回复

使用道具 举报

发表于 10-2-2010 12:02 AM | 显示全部楼层
这是 C#?
抱歉。。。。只会 java 不会 C
johnlth93 发表于 9-2-2010 10:46 PM


C++ 來的。。 C# 的 include 沒有 .h 的。
回复

使用道具 举报

Follow Us
发表于 10-2-2010 06:50 AM | 显示全部楼层
也对啊,这是 .cpp ho
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 30-11-2025 04:01 AM , Processed in 0.151385 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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