2017-08-30 5 views
0

Ich lerne c über ein Handbuch und ich genieße es. Allerdings gibt es eine Frage, die ich feststecke.Falsche Berechnung? C-Programmierung Anfänger

Die Frage ist:

„Schreiben Sie ein Programm, dass, wenn die Anzahl schreiben‚x‘und die Zahl‚y‘, das Programm zeigt, wie viel% der x in y ist.“

"Die Antwort sollte 64% betragen, wenn x = 54 und y = 84"

Offensichtlich 54/84 = 0,64 ... * 100, der etwa 64% beträgt. Wenn ich jedoch mein Programm starte, wird 84,689699 angezeigt. habe ich ohne "100" getestet aber nichts. Es zeigt 0.84689699 ...

Ist mein Programm falsch oder ist es ein Problem des Compilers oder etwas? Ich bin ein Anfänger und es wäre sehr hilfreich, wenn mir jemand sagt, was los ist.

PS: Ich benutze atom.io und gcc-Compiler

#include <stdio.h> 

int main(void) 
{ 
    double vx; 
    double vy; 

    printf("Enter the 1st number : "); scanf("%f" , &vx); 
    printf("Enter the 2nd number : "); scanf("%f" , &vy); 

    printf("\a\n\nx is %f of y" , vx/vy * 100); 
    return 0; 
} 
+0

ich auch mit 100,0 statt 100 aber nichts versucht zu verbinden ... – Pingu

+6

die Warnungen zu lesen: http://coliru.stacked-crooked.com/a/2f51b696c1f63219 – tkausl

+2

% lf (Kleinbuchstabe L) nicht% f – pmaxim98

Antwort

1

Obwohl scanf eine Variadische Funktion die Eingabe nicht gefördert werden kann. scanf nimmt einen Zeiger als Eingabe, daher müssen Sie angeben, dass es %lf wird. Wenn die Eingabe eine Variable und kein Zeiger wäre, würde C float zu double fördern. In Ihrem Programm scanf Funktion hat %f anstelle von %lf. Unten Code funktioniert gut und die Ausgabe ist 64.285714 auf MinGW.

Auch finden Correct format specifier for double in printf

int main(void) 
{ 
    double vx; 
    double vy; 

    printf("Enter the 1st number : "); scanf("%lf" , &vx); 
    printf("Enter the 2nd number : "); scanf("%lf" , &vy); 

    printf("\a\n\nx is %f of y" , vx/vy * 100); 
    return 0; 
} 
+0

Vielen Dank, ich wusste nicht die Existenz von% lf, – Pingu

+0

Aber es gibt einen Grund, warum Sie '% lf' für' scanf benötigen '. Sie brauchen es nicht für 'printf'. Lies meine Antwort. – MCG

+0

Oh, es gibt eine Seite, wo sie über% lf aber 5 Seiten nach der Frage erklären .... Danke. – Pingu

0

Sie einen Fehler in Ihrer scanf Funktion gemacht.

% f in einer scanf-Funktion bedeutet, dass Ihre Eingabe in eine float-Variable eingegeben wird.

Verwenden Sie stattdessen einen% lf.

#include <stdio.h> 

int main(void) 
{ 
    double vx; 
    double vy; 

    printf("Enter the 1st number : "); scanf("%lf" , &vx); 
    printf("Enter the 2nd number : "); scanf("%lf" , &vy); 

    printf("\a\n\nx is %f of y" , vx/vy * 100); 
    return 0; 
} 
+0

Danke, das hat mein Problem gelöst. Ich weiß nicht, warum sie nicht über die% lf weder für die% f im Reiseführer erwähnt. – Pingu

+0

@Pingu ein neues Buch bekommen. –

+0

@Pingu oder Sie können Google es. –