2016-06-09 14 views
0

Ok, also möchte ich ein Ein-Buchstaben-Zeichen und drei Zahlen in eine Struktur mit scanf eingeben, und ich möchte alle vier von ihnen mit einem drucken Funktion, die es druckt. Aber jedes Mal, wenn ich es laufe, bekomme ich Fehler, die sagen, dass ich es nicht ausführen kann, oder manchmal druckt es alles außer dem Zeichenteil, wo es einfach als leer hingehen würde. Was könnte daran möglicherweise falsch liegen?Ich möchte Zeichen und Ganzzahlen per Scanf in eine Struktur eingeben

#include <stdio.h> 

struct Score 
{ 
    char a; 
    float x, y, z; 
}; 




void main(void) 
{ 

void avg(char *a, float x, float y, float z); 


    char a1 = 'b'; 
    float x1 = 0, y1 = 0, z1 = 0; 

    printf("enter an alphaber\n"); 
    fflush(stdin); 
    scanf_s("%c", &a1); 
    printf("enter three numbers (ex:1,2,3)\n"); 
    fflush(stdin); 
    scanf_s("%f,%f,%f", &x1, &y1, &z1); 



    struct Score s1 = { a1, x1, y1, z1 }; 



    avg(s1.a, s1.x, s1.y, s1.z); 



} 
void avg(char *a, float x, float y, float z) 
{ 
    printf("%c (%f,%f,%f) \n", a, x, y, z); 
} 
+1

Sie * nicht definiertes Verhalten aufgerufen * von Daten mit falschem Typ auf 'printf()' in Funktion 'avg()' vorbei: '% c 'fordert' int', aber 'a' hat' Typen char * '. – MikeCAT

+0

danke für die Antwort, was kann ich ersetzen c mit ??? sry ich bin total neu in C++ –

+0

Gibt es einen guten Grund, warum Sie 'scanf' /' printf' anstelle von 'iostream' verwenden? – user463035818

Antwort

0

Die Signatur von avg() ist falsch. Das erste Argument sollte nicht char*, sondern char sein.

Weil ich MSVC-spezifischen Code hasse, sollte Ihr Code so sein. Beachten Sie, dass Sie überprüfen sollten, ob die Messwerte erfolgreich sind.

#include <stdio.h> 

struct Score 
{ 
    char a; 
    float x, y, z; 
}; 

int main(void) 
{ 

    /* declareing function inside function is unusual, but not bad */ 
    void avg(char a, float x, float y, float z); 

    char a1 = 'b'; 
    float x1 = 0, y1 = 0, z1 = 0; 

    printf("enter an alphaber\n"); 
    if (scanf("%c", &a1) != 1) { 
     puts("read error"); 
     return 1; 
    } 
    printf("enter three numbers (ex:1,2,3)\n"); 
    if (scanf("%f,%f,%f", &x1, &y1, &z1) != 3) { 
     puts("read error"); 
     return 1; 
    } 

    struct Score s1 = { a1, x1, y1, z1 }; 

    avg(s1.a, s1.x, s1.y, s1.z); 

} 

void avg(char a, float x, float y, float z) 
{ 
    printf("%c (%f,%f,%f) \n", a, x, y, z); 
} 
+0

Nur pingelig, aber Sie sollten 'scanf ("% c ", & a1)' vermeiden, es sei denn, Sie möchten wirklich ein Leerzeichen lesen können. Ich bevorzuge grundsätzlich 'char dummy [2]; scanf ("% 1s", Dummy); a1 = * dummy; ' –

+0

und auch ich fragte mich, was ich verwenden könnte, wenn ich ein Array von Zeichen anstelle von nur Ein-Buchstaben-Alphabet wie oben gezeigt eingeben möchte. verwende ich% s und char [], um das zu tun? thnx –

+0

Verwenden Sie 'scanf ("% c ", &a1);', wenn Sie ein Nicht-Leerzeichen lesen und Whitespace zuerst überspringen möchten. Verwenden Sie '% Xs', um eine Zeichenfolge in einen Puffer zu lesen, wobei' X' eine Ganzzahl ist kleiner als die Größe des Puffers (die maximale Anzahl der zu lesenden Zeichen - Platz für ein abschließendes NULL-Byte) –