|
|
本帖最后由 卖女孩滴小火柴 于 8-2-2010 11:36 PM 编辑
希望有空的可以帮帮我解决 还是新手 是个功课
问题是在case 4的binSubt()的function 当我call它的时候没反应 只是output 0
如果把binSubt()里code copy去别的地方就可以有我要的output- #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- void decToBin()
- {
- int i,input,output;
- printf("Enter a decimal number from 0-255\n");
- scanf_s("%d",&input);
- for(i=7;i>=0;i--)
- {
- output=input/(1<<i);
- input=input-output*(1<<i);
- printf("%d",output);
- }
- printf("\n");
- }
- void binToDec()
- {
- int i,j,k,output,cnt,input,temp;
- do
- {
- k=0,output=0,j=1,i=0,cnt=0;
- printf("Enter a binary number: ");
- scanf_s("%d",&input);
- if(input<0)
- k=1;
- temp=input;
- while(temp)
- {
- i=temp%10;
- cnt++;
- if(i>1||cnt>10)
- {
- k=1;
- break;
- }
- output+=i*j;
- j=j*2;
- temp/=10;
- }
- }
- while(k==1||output==0);
- printf("%d\n",output);
- }
- int binAdd1()
- {
- int i,j,k,output,cnt,input,temp;
- do
- {
- k=0,output=0,j=1,i=0,cnt=0;
- printf("Enter 1st binary number: ");
- scanf_s("%d",&input);
- if(input<0)
- k=1;
- temp=input;
- while(temp)
- {
- i=temp%10;
- cnt++;
- if(i>1||cnt>10)
- {
- k=1;
- break;
- }
- output+=i*j;
- j=j*2;
- temp/=10;
- }
- }
- while(k==1||output==0);
- return(output);
- }
- int binAdd2()
- {
- int i,j,k,output,cnt,input,temp;
- do
- {
- k=0,output=0,j=1,i=0,cnt=0;
- printf("Enter 2nd binary number: ");
- scanf_s("%d",&input);
- if(input<0)
- k=1;
- temp=input;
- while(temp)
- {
- i=temp%10;
- cnt++;
- if(i>1||cnt>10)
- {
- k=1;
- break;
- }
- output+=i*j;
- j=j*2;
- temp/=10;
- }
- }
- while(k==1||output==0);
- return(output);
- }
- void binSubt()
- {
- char str[20];
- int i,count1=0;
- printf("Enter name: ");
- gets(str);
- printf("%s",str);
- for(i=0;i<=20;i++)
- {
- if(str[i]!='\0')
- {
- count1++;
- }
- else
- {
- break;
- }
- }
- printf("%d",count1);
- }
- void main()
- {
- int choice,choice1,choice2,choice3,ans1,ans2,total,i,output1;
- char str[20];
- do
- {
- printf("Select Menu\n");
- printf("1. Conversions\n");
- printf("2. Matrix Maths\n");
- printf("3. String Functions\n");
- printf("4. Exit\n");
- scanf_s("%d",&choice);
- switch(choice)
- {
- case 1:
- printf("Conversions\n");
- printf("1. Decimal to Binary\n");
- printf("2. Binary to Decimal\n");
- printf("3. Binary Addition\n");
- printf("4. Binary Subtraction\n");
- scanf_s("%d",&choice1);
- switch(choice1)
- {
- case 1:
- decToBin();
- break;
- case 2:
- binToDec();
- break;
- case 3:
- ans1=binAdd1();
- ans2=binAdd2();
- total=ans1+ans2;
- for(i=7;i>=0;i--)
- {
- output1=total/(1<<i);
- total=total-output1*(1<<i);
- printf("%d",output1);
- }
- printf("\n");
- break;
- case 4:
- binSubt();
- break;
- }
- continue;
- }
- break;
- }
- while(choice!=4);
- }
复制代码 |
|
|
|
|
|
|
|
|
|
|
发表于 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 的。 |
|
|
|
|
|
|
|
|
|
|
发表于 10-2-2010 06:50 AM
|
显示全部楼层
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|