Ich versuche, eine Zeichenfolge einzulesen, die Leerzeichen enthalten kann oder nicht. "Hallo Welt". Indem Sie die folgenden Schritte mit einem Zahlenauswahlmenü ausführen, das vom Benutzer eingegeben wird. Dies ist nur eine kleine Replik von dem, was ich versuche zu tun.Lesen einer Zeichenfolge mit Leerzeichen in C
#include <stdio.h>
#include <string.h>
int main(void){
char line[3][80];
strcpy(line[0],"default line 1\n");
strcpy(line[1],"default line 2\n");
strcpy(line[2],"default line 3\n");
for(int i = 0; i < 3; i++){
printf("%s", line[i]);
}
int option = 0;
printf("would you like to replace line 1? (1 for yes)\n");
scanf("%d",&option);
if(option==1){
printf("what would you like to replace the line with?\n");
fgets(line[0],strlen(line[0]),stdin);
}
for(int i = 0; i < 3; i++){
printf("%s", line[i]);
}
}
Warum ist es, dass ich nach 1 geben Sie die Zeile zu ändern, ist es die Anweisung druckt zu fragen, was ich mit ihm ersetzt werden soll und wird automatisch nichts und geben Sie die Saiten mit dem ersten Druck als leer?
Ich habe auch schon versucht, die Zeile mit sscanf("%[^\n\t]s", line[0]);
ohne Glück zu lesen. Irgendwelche Ideen?
Ich würde vermuten, dass 'fgets' ein EOF (Ende der Datei) gelesen als erstes Zeichen des Streams. –
Ich bin ziemlich sicher, dass es etwas mit dem 'scanf ("% d ", & Option)' zu tun hat, wenn gefragt wird, ob der Benutzer die Zeile ersetzen möchte, aber ich bin nicht sicher, ob es eine Möglichkeit gibt, das zu beheben. – TheBoxOkay
Nicht direkt mit Ihrem Problem verbunden, aber 'strlen (line [0])' sollte durch '80' ersetzt werden. Die Größe des Puffers ist nicht die Länge der Zeichenkette, die er enthält, sondern die Gesamtlänge des Puffers, der hier "80" ist. –