2016-11-30 4 views
0

Vielen Dank im Voraus für Ihre Antwort! Ich schrieb ein Programm, das meiner Meinung nach wahrscheinlich richtig scheint aber ein Fehler in dem Compiler (über die erste Zeile mit strcmp):C - Bytes von strcmp und String Vergleich von Array

„Falscher Typ: Größe des Elements 4 Bytes ist, aber die Größe des String ist 8 Bytes. "

float total_weight_kg(Array weight_array) { // todo: modify header (parameters, parameter types, return type) 
float sum = 0; 
for (int i = 0; i < a_length(weight_array); i+=2) 
{ 
    if(strcmp(get(String, weight_array, (i+1)), "kg") == 0){ sum = sum + get (float, weight_array, (i)) ;} 
    if(strcmp(get (String, weight_array, (i+1)), "l") == 0 ){ sum = sum + get (float, weight_array, (i)) ;} 
    if(strcmp(get (String, weight_array, (i+1)), "g") == 0 ){ sum = sum + (get (float, weight_array, (i))*1000) ;} 
    if(strcmp(get (String, weight_array, (i+1)), "mg") == 0){ sum = sum + (get (float, weight_array, (i)) * 1000000) ;} 
    else{printf("Impossible for this case. Unknown unit of measurement.");} 
} 
return sum;}  
+8

Was ist 'Array'? Was ist 'a_length'? Was wird "bekommen"? Was ist "Schnur"? Und auf welcher Zeile erhalten Sie den Fehler? Und ist es die vollständige und unbearbeitete Ausgabe des Compilers, den Sie zeigen? Außerdem erfahren Sie, wie Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) erstellen können. –

+1

Was genau ist die Frage? Fragen Sie, ob der Compiler das Programm falsch ablehnt? Wahrscheinlich ist es nicht. Fragen Sie, worüber sich der Compiler beschweren wird? Sicherlich gab es dir eine bessere Idee, als du uns gegeben hast. Fragen Sie, wie Sie es beheben können? Du hast uns nicht genug Informationen gegeben, um es zu erzählen. –

+0

Was ist 'get (float, weight_array, (i))'? 'float' ist ein Typ, keine Variable, gehört also in die Funktionsdefinition und wird nicht als Argument übergeben. Ich wette, 'String' ist auch ein (schlecht beratener) Typ, keine Variable. In diesem Fall wird "get" sowieso auf verschiedene Arten übergeben. –

Antwort

0

Floats sind 4-Byte. Erraten durch Ihre Nutzung der get Funktion (en),

get(String, weight_array, (i+1)) 

das Problem ist mit weight_array eine Reihe von Schwimmern zu sein, aber der erste Parameter einige Ausführung mit einem String Art tut.

Daher Ihre Fehler,

"Falscher Typ:. Größe des Elements ist 4 Bytes, aber die Größe des String ist 8 Byte"