• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage [C] Abschnitte eines Strings in Variablen Speichern

the_real_at_m

Neues Mitglied
Mooin,
Ich bin mal wieder da und habe eine Frage, weil ich momentan an der Aufgabe verzweifle und nicht für jeden Kleinkram meinen Lehrer fragen möchte.

WIr haben momentan in Anwendungsentwicklung ein Projekt was mit Fragen & Antworten arbeitet und ich habe momentan soetwas: (Wird aus einer datei eingelesen)

Fragennr|Frage|Aw1|Aw2|Aw3|Aw4|Aw5(Die richtige Antwort)

Nun ist das Problem, die einzelnen Sachen ( |ist hier der Trenn-faktor, also delimiter) sollen als einzelne Variablen abgespeichert werden damit ich diese einzeln weiterverwenden kann.

Fragennr = question_nr ; frage = question; aw1= answer1 [...] aw4 = answer4, aw5 = rightanswer;

Momentan funktioniert das Teilen schon mit diesem code:

Code:
char eingelesen[] ="1|frage|falsch1|falsch2|falsch3|falsch4|richtig";
char delimiter[] = "|";
char *ptr;

// Initialisieren und ersten Abschnitt erstellen
ptr = strtok(eingelesen, delimiter);

while(ptr != NULL) {
    printf("Abschnitt gefunden: %s\n", ptr);
    // Nächsten Abschnitt erstellen
     ptr = strtok(NULL, delimiter);    
}

Ich hatte jetzt gehofft dass ich am Anfang eine Zahl (stringteilung) angeben kann, die praktisch festhält wie oft die whileschleife schon durchgelaufen ist, und mithilfe dieser dann die anzahl auslesen und den pointer in die jeweiligen variablen zu schreiben..
Vor dem abschließenden } folgendes einbauen:
Code:
  if (stringteilung == "1"){question_nr = ptr;}
   else if (stringteilung == "2"){question = ptr;}
   else if (stringteilung == "3"){answer1 = ptr;}
   else if (stringteilung == "4"){answer2 = ptr;}
   else if (stringteilung == "5"){answer3 = ptr;}
   else if (stringteilung == "6"){answer4 = ptr;}
   else if (stringteilung == "7"){rightanswer = ptr;}
   
   stringteilung++;
Nur das Problem ist da er sagt mir immer ich vergleiche einen pointer und einen Integer miteinander :/
[Warning] comparison between pointer and integer [enabled by default]

Wo liegt mein Problem? :/
 
Werbung:
Nun ist das Problem, die einzelnen Sachen ( |ist hier der Trenn-faktor, also delimiter) sollen als einzelne Variablen abgespeichert werden damit ich diese einzeln weiterverwenden kann.

Mit C habe ich keine Erfahrung, kann dir nur sagen, wie ich es in JavaScript machen würde. Den String am | splitten und das Ergebnis als Array speichern. Das Array anschließend nicht durch ein while sondern ein forEach schicken. Jeder Durchlauf gibt einen index und einen value, die sich weiterverarbeiten lassen:

Code:
var fragen = "irgend|was",
    result = fragen.split("|");

result.forEach(function(element, index, array){
  console.log("antwort_" + index + " : " + element);
});
 
Werbung:
Dein Problem hast du ja selber genannt. du vergleichst einen Integer (Stringteilung) mit einem Pointer ("1") bzw alles andere.

in C ist "ASEDF" ein pointer, wie auch char[] = "asdf" ein pointer ist. (Nicht zu 100% so, aber in deinem Fall trifft es zu.)

du müsstest stringteilung == 1 bzw die anderen Zahlen schreiben... oder noch besser 1 == stringteilung. Was in C als good practice angesehen wird, da eine zuweisung über stringteilung = 1 einfach nur ein boolean wäre und somit keine Warning geben würde.
 
Zurück
Oben