Próbuję odczytać ciąg znaków, który może ale nie musi zawierać spacji ex. "Witaj świecie". Wykonując następujące czynności z menu wyboru liczby, które jest wprowadzane przez użytkownika. To tylko mała replika tego, co próbuję zrobić.Czytanie w ciągu znaków ze spacjami w 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]);
}
}
Dlaczego jest to, że po tym, jak wprowadzić 1, aby zmienić linię, drukuje oświadczenie z prośbą o to, co chcę, aby zastąpić go i automatycznie przejdzie nic następnie drukowanie ciągi z pierwszego jak pusta?
Próbowałem już bez problemu czytać linię z sscanf("%[^\n\t]s", line[0]);
. Jakieś pomysły?
Przypuszczam, że 'fgets' czytać EOF (koniec pliku) jako pierwsza postać strumienia. –
Jestem prawie pewien, że ma to coś wspólnego z 'scanf ("% d ", & option)' przed pytaniem, czy użytkownik chciałby zamienić linię, ale nie jestem pewien, czy jest sposób, aby to naprawić. – TheBoxOkay
Nie ma to bezpośredniego związku z twoim problemem, ale 'strlen (linia [0])' należy zastąpić przez '80'. Rozmiar bufora nie jest długością łańcucha, który zawiera, ale całkowitą długością bufora, który jest tutaj "80". –