Jak ignorować spacje we wczytywanym stringu z pliku?

0

Mam problem, otóż mój plik.txt zawiera dajmy na to "Nowy Jork - Stany Zjednoczone Ameryki"

i teraz miasto czyli "nowy jork" chce wczytać do tablicy miasto, a po średniku kraj do tablicy kraj. Problem w tym, że nie wiem jak ignorować spacje w fscanfie, ponieważ wczytuje mi tylko string do spacji...
funkcja wygląda tak:

nowy = (lista*)malloc(sizeof(lista));
			nowy ->next = NULL;

			fscanf(wczytaj, "%s - %s", bufor1,bufor2);
       			strcpy(nowy ->dane.nazwa_miasta, bufor1);
			strcpy(nowy ->dane.nazwa_kraju, bufor2);

próbowałem fgetsem, ale tam musze podawać długość wczytywanego strumienia, którego przecież nie znam, bo dopiero go wczytuje... jak to zrobić?

próbowałem również

fscanf(wczytaj, "%s[^ ] - %s[^ ]", bufor1,bufor2);

lecz to powoduje zawieszenie się przy wywołaniu fukcji. jakieś pomysły? podpowiedzi?

0

niestety, to też nie działa. zawiesza się program, nic sie nie dzieje i nic nie można zrobić.

void odczyt_z_pliku(lista **glowa2){
	FILE *wczytaj = NULL;
	char nazwa_pliku[] = "lista.txt";
	char bufor1[64];
	char bufor2[64];
	lista *nowy;

	wczytaj = fopen(nazwa_pliku,"r");
	if (wczytaj==NULL)
		printf("Blad otwarcia pliku");
	else
	{
		while (!feof(wczytaj))
		{
			//alokowanie pamieci na nowy element
			nowy=(lista*)malloc(sizeof(lista));
			nowy->next = NULL;


			fscanf(wczytaj,"%[ A-Za-z]s",bufor1);
			strcpy(nowy->dane.miasto,bufor1);
			fscanf(wczytaj,"- %[ A-Za-z]s",bufor2);
			strcpy(nowy->dane.kraj,bufor2);

			if (*glowa2==NULL)
				*glowa2=nowy ;
			else
			{
				nowy->next=*glowa2;
                *glowa2=nowy;
			}
		}
		printf("Plik zostal wczytany");
	}
	fclose(wczytaj);
}
0

Czy kompilujesz z opcją C99 ?

0

kompiluje to w CodeBlocksie, gdzie taką opcje zaznaczyć? Właśnie też instaluje Visuala 2010, tam też musze jakieś opcje wybierać?

0

kompiluje to w CodeBlocksie, gdzie taką opcje zaznaczyć?
Gdzieś w opcjach projektu...

Właśnie też instaluje Visuala 2010, tam też musze jakieś opcje wybierać
Obsługa C99 w Visualu 2010 jest szczątkowa i ogranicza się bodajże do komentarzy //.

0

Visual C++ praktycznie nie obsługuje C99.

W Code::Blocks musisz dodać -std=c99 do opcji kompilatora (Settings->Compiler->Other settings).

http://stackoverflow.com/a/12152217

0

No to lipa, bo projekt będzie sprawdzany w visualu 2010... czyli nie ma opcji by wczytywać stringi z białymi znakami?

edit: dodałem ten standart do codeblocka, również nie działa.

0

odświeżam, może ktoś jeszcze wie coś na ten temat, bo rozwiązania problemu nie znalazłem :<

1

Wczytaj za pomocą fgets() znajdź kreskę za pomocą strchr() i podziel sobie napis a dwie części.

0

No, dzieki poradziłem sobie z tym :)

jakby ktoś kiedyś potrzebował:

char bufor[64];
	char *bufor1;
	char *bufor2;
	char korektor[] = "-";

...
...

while (!feof(wczytaj))
		{
			//alokowanie pamieci na nowy element
			nowy=(playlista*)malloc(sizeof(playlista));
			nowy->next = NULL;


			fscanf(wczytaj, "%[^\n]\n", bufor);		//wczytanie całej linijki tekstu z pliku 	
			printf("%s\n",bufor); 
			bufor1 = strtok(bufor,korektor); //tutaj jest rozdzielony bufor wg znaku "-" do dwóch osobnych tablic
			bufor2 = strtok(NULL,korektor);
            strcpy(nowy->dane.nazwa_zesp,bufor1); 
			strcpy(nowy->dane.tytul,bufor2); 

...
...
1
...
    char korektor[] = "-\n";
 
...
 
while (fgets(bufor,sizeof(bufor),wczytaj))
        {
            //alokowanie pamieci na nowy element
            nowy=(playlista*)malloc(sizeof(playlista));
            nowy->next = NULL;
            printf("%s",bufor);
...

1 użytkowników online, w tym zalogowanych: 0, gości: 1