problem w C. Omija jedna komende

0

mam taki fragment kodu

while (!feof(plik1))
{
clrscr(); fgets(wyraz,70,plik1); printf("%s", wyraz);
gets(napis);
if(napis != wyraz)
kara+=5;
i++;
}

Pobiera z pliku 70 znakow i je wypisuje a uzytkownik ma wpisac to co sie pojawilo i jest problem poniewaz wypisuje jedna linijke i omija pierwsze gets(napis). Za drugim razem juz sie zatrzymuje i czeka na wpisanie.
Dlaczego on omija za pierwszym razem? jak to ominac?

0

przed

gets(...)

daj:

fflush(stdin);
0

while (!feof(plik1))
{
clrscr();
fgets(wyraz,70,plik1);
printf("%s", wyraz);
fflush(stdin)
gets(napis);
if(napis != wyraz)
kara+=5;
i++;
}

Pomoglo dziala. Tylko co to oznacza? W helpie pisze ze zwraca EOF jak wykryje bledy? a co za blad sie pojawil?

A drugie moje pytanie jak zrobic porownanie tekstu z pliku z tekstem co uzytkownik wpisal? do odczytu z pliku uzylem fgets a do odczytu od uzytkownika gets i jak wpisze to samo to w porownaniu nie wychodzi to samo. Jakies znaki specjalne sie zapisuja? Np enter po zatwierdzeniu i to moze wina?

0
  1. fflush po prostu czysci strumien (tu: standardowe wejscie)

  2. Nie pomoge ci pewnie za bardzo, bo sie nawet nie wczytalem, a siadlem do kompa na 5min dla odprezenia;)
    Ale jesli chcesz porownac czy te dwa stringi sa takie same, to chocby tak:

char isequal(char *wyraz, char *napis)
{
int len = strlen(napis); //przyjalem, ze maja na koncu 0 (ze to NTS)
if(len != strlen(wyraz)) return 0; //musza miec rowna dlugosc
for(int i=0; i<len; i++)
 if(napis[i] != wyraz[i])
  return 0;
return 1;
}

NIe mam zbyt czasu na wlaczanie srodowiska, wiec nawet nie wiem, czy sie skompiluje... Poza tym prawie na pewno możliwe, że da sie to zrobic prosciej, ewentualnie.

PS> jeżeli napisałem od rzeczy to sorry, z pospiechu.

0

tez takie problemy mialem...i mi jakos pomagalo dodanie znaku konca linii :

printf("%s\n", wyraz);

0

Hmm sadze ze to zalozenie nie moze byc spelnione bo slowo "ala" jest po sprawdzeniu strlen 4 znakowe a jak uzytkownik wpisze to pokazuje ze 3 znakowe. Jak to obejsc? mozna jakos zrobic aby odciac ostatni znak?

dzieki za pomoc

0

fgets wczytuje zawsze (chyba, bo jestem w szkole i nie mam środowiksa pod ręką, a net taki, ze dziwne, ze 4p chodzi) dodaje do stringa znak konca linii (dec 10??). Porpstu obetnij stringa, lub w odpowiednim miejscu za strlen dodaj -1

0

Jedyne rozwiazanie to odciac ostatni znak. Bo po -1 to pozniej w porownaniu i tak wychodzi ze sie nie zgadza w porownaniu.
Jaka jest na to funkcja?

dzieki

0
char compare(char *wyraz, char *napis)
{
int len = strlen(napis)-1; //jeżeli napis pochodzi z fgets
if(len != strlen(wyraz)) return 0; 
for(int i=0; i<len; i++)
 if(napis[i] != wyraz[i])
  return 0;
return 1;
}

Nie mam kompilera, ale jezeli nie ma głupich błędów, to powinno chodzic dobrze.

PS> Men załatwił taki net w szkołach, że no rmalnie pozazdrościć... Raz na 10 refreshy możesz liczyć na to, że zobaczysz kawałek strony...

0

Z pobieżnego przeczytania jeśli chodzi o porówanie stringów W C++ wiem że jest funkcja : StrCmp(va1,val2) : StringCompare. Zobacz zresztą w helpie.
Ja kiedyś z niej korzystałem.

0

No tak ale ta funkcja nie moze tutaj byc zastosowana poniewaz te wyrazy zawsze sie beda roznic od siebie. Wyraz wczytany z pliku ma zawsze jakis dodatkowy znak. No ale juz dzieki ten sposob co Krecik napisal dziala dobrze.
Dzieki za pomoc

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