Plik, porównanie i problem :)

0

Witam!!

Mam kod źródłowy:

#include <iostream.h>
#include <stdio.h>
main()
{
FILE* plik;
plik=fopen("pytania.txt","r");
if(plik==NULL)
{
return 1;
}
char bufor[100][200];
char pytanie[100];
gets(pytanie);
for(int i=0;i<=100;i++)
{
fgets(bufor[i],100,plik);
if(!strcmp(pytanie,bufor[i]))
cout << bufor[i++] ;
}
}

Plik pytania .txt zawiera:

jak
tak

Włączam program a tam powinno mi się pokazać słowo tak lecz nic mi się nie pokazuje - co mam zrobić?

0

fgets(bufor[i],100,plik);
//fgets pobiera tez znak ENTERa na koncu linii stad porownania nie wychodzily
bufor[i][strlen(bufor[i])-1] ='\0';
// usuniecie ENTERa
if(!strcmp(pytanie,bufor[i]))
cout << bufor[i++] << endl;
// zeby wypisac trza oproznic bufor
}

0

Witam

Po wczytaniu z pliku tablica bufor będzie wyglądać tak
bufor[0]=tak\n\0
bufor[1]=jak\0
bufor[2]=\0
itd

natomiast pytanie
pytanie=tak\0 po wpisaniu z klawiatury tak
pytanie=jak\0 po wpisaniu z klawiatury jak

Teraz widzisz dlaczego słowo "jak" ci się wyświetla na ekranie a słowo "tak" nie
są różne.

Co jest temu winne?
Funkcja gets wczytuje wiersz, ale końcowy znak nowego wiersza(\n) zastępuje
znakiem(\0)
natomiast funkcja fgets() kończy czytanie gdy przeczyta n-1 znaków(dokłada za nimi znak \0) lub napotka znak końca lini(\n).Wtedy nie likwiduje znaku nowego wiersza tylko dokłada za nim znak(\0)

Rozwiązać ten problem możesz tak:

#include <iostream.h>
#include <fstream.h>
main()
{
char bufor[100][200];
char pytanie[100];
ifstream strumien;          //strumien do odczytu zamiast FILE

strumien.open("pytania.txt");  //otwarcie pliku
gets(pytanie);
for(int i=0;i<=100;i++)
  {
    strumien.getline(bufor[i],100); //nie wstawia znaku \n
    if(!strcmp(pytanie,bufor[i]))
    cout << bufor[i++] ;
  }
strumien.close();
cin.get();
}

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