2010-11-19 2 views
0

Ich versuche, einige Werte in einem Strukturobjekt zu speichern, und ich möchte die Eingabeaufforderung wiederholen, bis der Benutzer "Ja" eingibt. Ich möchte dafür eine Do-while-Schleife verwenden. Ich versage bereits beim Einlesen des ersten "Nachnamens". Wenn ich etwas eintippe, stoppt das Programm (kein Fehler). Ich benutze das Do-while nicht einmal, da ich mir nicht sicher bin, ob es mit meiner while() Bedingung funktionieren wird.

Speichern von Werten in Strukturobjekten mithilfe von c und einer Do-While-Schleife

#include <ctype.h> 
#include <stdio.h> 
#include <string.h> 

struct employeelist 
{ 
char last[6]; 
char first[6]; 
int pnumber; 
int salary; 
}; 

int main() 

{ 
struct employeelist employee[5]; 
char check; 

//do 
//{ 
printf("Hello. Please type in the last name, the first name, the personal number and the salary of your employees.\n"); 
printf("Last name: "); 
scanf("%c", employee[1].last); 

printf("First name: "); 
scanf("%c", employee[1].first); 

printf("Personal number: "); 
scanf("%d", &employee[1].pnumber); 

printf("Salary: "); 
scanf("%d", &employee[1].salary); 

printf("You have more employess (yes/no)?: "); 
scanf("%c", &check); 
//}while (scanf("yes")); 

return 0; 
} 
+0

Sie erkennen, dass Sie tatsächlich keine Frage gestellt haben, richtig? Du hast eine Menge Code verloren und gesagt: "Es geht nicht". – abelenky

+0

Sorry, ich werde versuchen, das nächste Mal genauer zu sein. Und das sind keine Hausaufgaben, die ich für die Schule mache, ich lerne nur für mich selbst. – Ordo

Antwort

2

Verwenden %s als Formatbezeichner, wenn Sie versuchen, eine Zeichenfolge zu erhalten. Vielleicht möchten Sie auch seine Länge auf 5 begrenzen, da so viel Platz für last und first ist. Das wäre also %5s. Außerdem sind 5 Zeichen für einen Namen ziemlich kurz.

Ein weiterer Kommentar: Arrays in C sind Null-basierte, so employee[1] ist die zweite employeelist in Ihrem Array. Wenn Sie dies in einer Schleife mit einem inkrementierenden Index tun möchten, beginnen Sie bei 0.

+0

Danke! Ist es notwendig, einen Wert für die Char [Länge] anzugeben? – Ordo

+1

@Ordo: Sortieren von. Wenn Sie zur Laufzeit dynamisch Speicherplatz für die Zeichenfolge reservieren möchten, gibt es eine GNU-Erweiterung, mit der Sie "a" im Konvertierungsspezifizierer verwenden können, um 'scanf' aufzurufen' malloc'. Natürlich wird das wahrscheinlich nicht im Microsoft C++ - Compiler funktionieren. Sie können malloc auch selbst anrufen, aber für die Hausaufgaben ist es wahrscheinlich am einfachsten, einfach große Puffer statisch zuzuordnen und Ihre Benutzer mit dem Format-Spezifizierer daran zu halten. – nmichaels

+0

Wenn Sie es in einem Zeichenarray speichern möchten, müssen Sie die Länge angeben, es sei denn, Sie planen einen mallocing – prelic

1

Hallo, wenn Sie Char Array lesen müssen Sie scanf ("% s", Mitarbeiter [1]. Last); % s aber nicht% c

1

Was denken Sie, was dieser Code macht?

scanf("%c", .... 

%c zeigt an, dass scanf nur ONE Charakter lesen sollte.
Ein Buchstabe wird dir keinen vollständigen Namen geben.

Sie müssen zu %s für Starter wechseln.

1
  1. Zunächst wird der erste Index arbeiten mit wird '0' sein, nicht 1.
  2. falsche Kennung für Zeichenkette, es sollte% s sein.
  3. Wenn Sie nur von iterieren wollen fragt y/n dann nur die Meldung Anzeige ändern von ja/nein zu y/n und auch, dass die seltsamen während Zustand ändern == ‚y‘ || überprüfen = = 'Y'.
  4. Der Code funktioniert eigentlich nicht nach 5 Wiederholungen, weil Sie nur 5 Strukturen von initialisiert, dass type.Why nicht Sie fügen hinzu, dass in die Schleife?
Verwandte Themen