Also würde ich gerne ein einfaches Programm zur Eingabe von Daten mit Hilfe von Strukturen erstellen.Array von Strukturen; Eingabe mehrerer Strings
Meine ursprüngliche Programm sah wie folgt aus:
#include <stdio.h>
#include <stdlib.h>
struct student {
int num;
char name[20];
};
int main()
{
int size, i;
scanf("%d", &size);
struct student s[size];
for(i=0; i < size; i++){
scanf("%d", &s[i].num);
scanf("%s", &s[i].name);
}
for(i=0; i < size; i++){
printf("no.:%d\n", s[i].num);
printf("name:%s\n", s[i].name);
}
return 0;
}
Mein Testeingang wäre:
2
1 Name1
2 Name2
Es funktionierte aber nur, wenn die Daten korrekt eingegeben wurde. Aber als ich versuchte, mehr Strings in meiner Struktur zu verwenden, begann es unordentlich zu werden. Zum Beispiel so etwas wie dies funktioniert nicht richtig:
#include <stdio.h>
#include <stdlib.h>
struct student {
int num;
char name[20];
char gender;
char address[20];
};
int main()
{
int size, i, j;
scanf("%d", &size);
struct student s[size];
for(i=0; i < size; i++){
scanf("%d", &s[i].num);
scanf("%s", s[i].name);
scanf("%s", s[i].gender);
scanf("%s", s[i].address);
}
for(i=0; i < size; i++){
printf("no.:%d\n", s[i].num);
printf("name:%s\n", s[i].name);
printf("gender:%s\n", s[i].gender);
printf("address:%s\n", s[i].address);
}
return 0;
}
Ich verstand, dass Problem Verwendung von scanf für String-Eingang liegt muss also versuchte ich getchar() zu verwenden. Ich dachte, so etwas könnte funktionieren.
for(i=0; i < size; i++){
int j=0;
while((s[i].name[j]=getchar()) != ' ');
j++;
s[i].name[j] = '\0';
}
Es funktioniert aber nicht. An diesem Punkt wurde ich verwirrt und ich bin nicht wirklich sicher, was falsch läuft. Ich meine, ich möchte Eingang so etwas wie:
1001 Jeff M No.2_road_city
durch die Struktur, aber ich bin immer verwirrt, wie genau es getan werden sollte.
aktiviert Warnung ist der erste Schritt, bevor auf Stackoverflow fragen 'scanf ("% s", & s [i] .name); '=>' scanf ("% s", s [i] .name); '... und andere triviale Fehler.' scanf ("% s", & s [i] .gender); '= > 'scanf ("% c ", & s [i] .ge nder); 'etc – Stargateur
Überprüfen Sie jeden' scanf() '- Aufruf, um sicherzustellen, dass er die richtige Nummer zurückgibt (1, wenn Sie bei jedem Aufruf ein Feld lesen). Wenn es 1 nicht zurückgibt, hast du ein Problem. Es könnte besser sein, die N-Aufrufe in einem zu kombinieren - das können Sie tun. Es kann auch besser sein, Zeilen mit ['fgets()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html) oder POSIX ['getline()'] zu lesen (http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html) und bearbeite dann die Zeile mit 'sscanf()'. –