Ich übe Programmierung in c, aber ich bin auf ein Problem gestoßen, das ich nicht scheinen kann, herauszufinden. Ich habe eine printf
Anweisung mit zwei Markern für zwei verschiedene int
Werte. Egal was die erste int
ist, es druckt 0, aber die zweite int
druckt normal. Hier ist der Code:Mehrere Eingänge drucken 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;
}
Das Problem ist, dass die printf
Aussagen in den ersten beiden Fällen den tatsächlichen Wert von int a
ignorieren, aber es funktioniert in der Regel für den Wert der beiden Funktionen. Ich bin mir nicht sicher, was falsch ist, wie a
einen Wert vor, in der scanf
Anweisung gegeben wird, und ich verwende die richtige Markierung im Text.
Sie überprüfen nie den Rückgabewert der ersten 'scanf()', also vielleicht ist es fehlgeschlagen und 'a' hat keinen Wert zugewiesen bekommen. Das ist gefährlich. – unwind
@unwind Ich benutze den int-Wert in den Funktionen und sie funktionieren zwar richtig, sonst wäre die zweite Ausgabe falsch. –
@Comrade_Comski IMO das Snippet sieht gut aus, also sind es eher die Details, von denen man annimmt, dass sie funktionieren, OK. Bitte machen Sie Ihren Code vollständig, damit jeder das Problem reproduzieren kann. –