problem z fgets

0

Witam.
Banalny program z pętla for i fgets
Dlaczego przeskakuje do 'nazwy 2' wie ktoś oto kod:
http://pastebin.com/44VP1cEQ

0

bo scanf() wczyta ci tylko liczbę z znak \n zostawi w buforze. fgets() ten znak zje i przeskoczy do kolejnej iteracji

0

Dzięki kolego na śmierc zapomnialem o znaku zerowym.

0

Dobra napisalem cos takiego ale nie dziala. Może ktoś pomóc z tym '\0'? Bo juz mi ręce opadaja :/

#include <stdio.h>
#include <string.h>

#define MAX 81

int main()
{

int ile;
char licznik;
char *TabNazw[MAX];
char *rem;

printf("Podaj liczbe: ");
scanf("%d", &ile);

if (ile == 0)
{
        printf("Podales zero.\n");
        system("pause");
        return 0;
}
else    

for(licznik = 0; licznik < ile; licznik++)
{
            printf("Podaj nazwe %d: ", licznik+1);
            fgets(TabNazw,MAX,stdin);
            for(rem = TabNazw; *rem != '\0' && *rem != '\n'; rem++)
            *rem = '\0';
}

system("pause");
return 0;
}

0

To jest w ogóle źle napisane. Próbujesz tu coś wczytywać do char* na który nie zaalokowałeś pamięci. WTF? Na oko to powinno być jakoś tak:

#include <stdio.h>
#include <string.h>

#define MAX 81

 int main()
 {     
     int ile;
     char licznik;
     char TabNazw[MAX][MAX];
     char *rem;

     printf("Podaj liczbe: ");
     scanf("%d ", &ile);
     
     if (ile == 0)
     {
             printf("Podales zero.\n");
             return 0;
     }
     else    
     {
	     for(licznik = 0; licznik < ile; licznik++)
	     {
	                 printf("Podaj nazwe %d: ", licznik+1);
	                 fgets(&(TabNazw[licznik][0]),MAX,stdin);
	                 for(rem = &(TabNazw[licznik][0]); *rem != '\0' && *rem != '\n'; rem++)
	                 *rem = '\0';
                         printf("Wczytano %s",TabNazw[licznik]);
	     }
     }
 return 0;
 }
0

To Ci w ogóle działa? U mnie tylko pyta o 'ile' i jak wpiszę jakakolwiek liczbę kursor idzie linijke niżej i tylko mruga. :/

EDIT: ok znalazłem przyczynę, dzięki. (ale i tak zasrany '\0' przeskakuje.)

0

Tak z ciekawości, gdzie wyczytałeś, że problemem jest znak '\0'?
Ten wewnętrzny for jest kompletnie bez sensu - czyścisz to co wprowadziłeś.

Zaraz za tym

scanf("%d", &ile);

daj fgets(TabNazw[0], MAX, stdin);

0

Wiem, że jest bez sensu ponieważ nie działa ;]

A odpowiadając na Twoje pytanie znak '\0' jest na 100% przyczyna powstawania błędu. chodzi o różnicę w pobieraniu danych przez scanf() i fgets(), jest o tym w sieci w cholere. Ale każdy z podawanych przykładów (jak to ominąć) jest tylko obchodzeniem problemu. Tak naprawde powinienem użyć fputs i fgets (wtedy jest ok. Ale dano mi takie powalone zadanie, że mam użyć scanf.

0

Problemem nie jest znak '\0' tylko zostający po scanf znak '\n' i być może '\r'. Jednym z rozwiązań tego problemu jest to co Ci wyżej napisałem - po prostu wczytanie tych znaków.

0

Właśnie czytałem, że to chyba '\n'
Kurde proste i genialne, dzięki wielkie.

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