Ich bin neu in C Sprache und arbeite an einem kleinen Programm.Akzeptieren von Leerzeichen in C-String-Eingabe
Eigentlich versuche ich String vom Benutzer mit scanf zu nehmen. Aber immer, wenn ich mit Leerzeichen in die Zeichenkette gebe, läuft das Programm unendlich weiter und ich musste die Stopptaste drücken. Ich habe Beispiele online gesehen und ich habe sie auch benutzt, aber das gibt mir dann einen neuen Fehler.
Hier ist mein Code
struct student s1;
char input[MAX_NAME_SIZE];
printf("Enter name>");
scanf("%s",input);
if(strlen(input) > 10)
{
int l;
for(l = 0 ;l < 10;l++)
s1.name[l] = input[l];
}
int error = 0;
do
{
if(error == 1)
printf("Invalid day. ");
printf("Enter birthday: day>");
scanf("%u",&s1.birthday.day);
error = 1;
}while(s1.birthday.day < 1 || s1.birthday.day > 31); //checking the criteria
Ich habe auch verwendet scanf ("% [^ \ n] s, Eingang), aber es dann die scanf überspringen und mit dem zweiten Scanf gehen.
Bitte Hilfe
Wenn es für immer läuft, dann ist es Ihre Schleife, die das Problem ist. – Takarii
Und wie nennt man das? Bitte geben Sie an, wie Sie das Problem reproduzieren können. Was ist erwartet, was ist das Ergebnis? – 4pie0
So funktioniert ['scanf'] (http://en.cppreference.com/w/c/io/fscanf) mit dem Format"% s ", es liest * Leerzeichen getrennte *" Wörter ". Wenn Sie eine ganze Zeile lesen müssen, gibt es andere Alternativen (http://en.cppreference.com/w/c/io/fgets). Außerdem können Sie mit 'scanf' dem Format Optionen hinzufügen, so dass es nicht zu viele Zeichen lesen und außerhalb der Grenzen Ihres Arrays schreiben kann, ohne dass Sie die 'Strlen'-Prüfung oder das manuelle Kopieren durchführen müssen. –