私はC言語でプログラミングをしていますが、私は理解できないような問題に遭遇しました。私はprintf
ステートメントを2つの異なったint
値の2つのマーカーで持っています。最初のint
が何であっても0を出力しますが、2番目のint
が正常に印刷されます。ここでは、コードです:複数の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;
}
問題は、最初の2つの場合にprintf
文がint a
の実際の値を無視するということですが、それは2つの関数の値のために正常に動作します。私は何が間違っているのか分かりません。a
にはscanf
という文の前に値が与えられており、テキストに適切なマーカーを使用しています。
最初の 'scanf()'の戻り値をチェックすることはないので、おそらく失敗し、 'a'は値が割り当てられていません。それは危険です。 – unwind
@unwind関数でintの値を使用していますが、正しく動作します。そうしないと、2番目の出力が間違っていました。 –
@Comrade_Comski IMOスニペットがうまく見えます。だから、それはあなたがOKと思う詳細です。誰もが問題を再現できるように、コードを完成させてください。 –