我正在用c编程,但遇到了一个我似乎无法解决的问题。我有一个printf
声明与两个标记为两个不同的int
值。不管第一个int
是什么,它都会打印0,但第二个打印通常是int
。下面的代码:打印多个输入输出0
#include <stdio.h>
#include <stdlib.h>
int a, temp;
int toBinary();
int toDecimal();
int main()
{
char c;
for(;;)
{
scanf("%d",&a);
scanf(" %c",&c);
switch(c)
{
case 'a' :
printf("%d converted to binary: %d\n",a,toBinary());
break;
case 'b' :
printf("%d converted to decimal: %d\n",a,toDecimal());
break;
case 'c' :
printf("EXIT\n");
return 0;
break;
default :
printf("ERROR c value: %c\n",c);
return 0;
}
}
}
int toBinary()
{
if (a == 0)
return 0;
else
{
temp = a;
a /= 2;
return (temp % 2 + 10 * toBinary());
}
}
int toDecimal()
{
int res=0, base = 1, rem;
while (a > 0)
{
rem = a % 10;
res = res + rem * base;
a /= 10;
base *= 2;
}
return res;
}
的问题是,前两个案件的printf
陈述忽略的int a
的实际价值,但它通常适用于两个函数的值。我不确定有什么不对,因为a
在scanf
声明之前给出了一个值,并且我在文本中使用了正确的标记。
你从不检查第一个'scanf()'的返回值,所以它可能失败并且'a'没有得到赋值。这很危险。 – unwind
@unwind我在函数中使用了int的值,它们可以正常工作,否则第二个输出就会出错。 –
@Comrade_Comski IMO的片段看起来不错,所以它是相当你承担工作的细节确定。请使您的代码完整,以便每个人都可以重现此问题。 –