2016-11-04 4 views
1
#include <stdio.h> 

int main(void) { 
    float base, height, hyp; 

    printf("input base of triangle:\n"); 
    scanf("%f", base); 

    printf("input height of triangle:\n"); 
    scanf("%f", height); 

    printf("input hypotenuse of triangle:\n"); 
    scanf("%f", hyp); 

    float perimeter = base + height + hyp; 

    printf("the perimeter of your triangle is: %f\n", perimeter); 



    return 0; 
} 

Ich laufe dies durch ideone.com und es zeigt Erfolg, dann die Standardeingabe leer ist, dann in stdout druckt er alle meine print-Anweisungen ohne Zahlenscanf() fordert nicht Eingang in stdin

+2

'scanf ("% f", Basis);' -> 'scanf ("% f", &base);' – BLUEPIXY

+5

ideone wird niemals für Ihre Eingabe warten, Geben Sie alle Ihre Eingabe in stdin-Box – Danh

+0

Geben Sie etwas in den Eingang ** vor ** das Programm laufen und Sie erhalten etwas wie "Laufzeitfehler \t Zeit: 0 Speicher: 2172 Signal: 11", weil Sie 'scanf' falsch aufrufen. – 4386427

Antwort

1

scanf einen Zeiger auf Ihre Datentyp erfordert, sollten Sie die Adresse Ihrer Variablen & passieren:

scanf("%f", &base); 
scanf("%f", &height); 
scanf("%f", &hyp); 

hinzuzufügen, einige Fehlerprüfung nützlich sein könnte, so etwas wie:

if(scanf("%f", &base) != 1) //number of items scanned is expected to be 1 
    //process error.. 
//etc 
+0

... und Code hinzufügen, um zu überprüfen, ob der Scanvorgang erfolgreich war, bevor er sich auf die Variable mit einem korrekten Wert verlässt. – unwind

+0

@ 4386427 'scanf' liefert bei einem Fehler einen negativen Wert. –

+1

@GillBates: Und andernfalls gibt es die Anzahl der gescannten Objekte zurück Die Eingabe ist keine Fließkommazahl Gibt 0 zurück. Überprüfen Sie den Erfolg, indem Sie sicherstellen, dass das Ergebnis genau der Anzahl der erwarteten Elemente entspricht. –

3

Dies ist, weil ideone nicht interaktiv ist. Im Gegensatz zu Ihrem Programm über die Befehlszeile ausgeführt wird, erfordert ideone Sie alle Eingaben im Voraus in der „Input“ Tab zur Verfügung zu stellen:

Ideone

Sie müssen alle Ihre Daten eingeben vor Ihr Programm ausgeführt wird.

P.S. Sobald Sie das tun, beachten Sie, wie Sie undefiniertes Verhalten haben, da Sie Werte lieber als Zeiger an scanf übergeben. Der beste Weg, dies auf ideone zu lösen, ist die Option "C99 strict", wenn Sie Ihren C-Code kompilieren. Dies würde bricht Ihre Kompilierung mit folgenden Warnung:

prog.c:7:11: error: format '%f' expects argument of type 'float *', but argument 2 has type 'double' [-Werror=format=]

scanf("%f", base); 
Verwandte Themen