podstawy C

0

Po uruchomieniu programu funkcja wprowadzanie() jakby pomija funkcje gets(), ktora dotyczy tablicy autor[] i i=0. Z czego może to wynikać. Podchodziłem od kilku stron, ale nie wiem. Dodam, że jestem jeszcze zielony w tematyce programowania. Ponizej kod programu, funkcje wyszukiwaniea() i wyszukiwanietyt() jeszcze nie testowalem, bo zawizielem sie na to. Tam też pewnie są jakies bledy ;)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAKS 100

int menu(void);
void wprowadzanie(void);
void wyszukiwaniea(void);
void wyszukiwanietyt(void);


char autor[MAKS][30];
char tytul[MAKS][30];
char wydawnictwo[MAKS][30];

int main(void){
	
	int i;

do{
	
	i=menu();
	switch(i){
		case 1:wprowadzanie();
		break;
		case 2:wyszukiwaniea();
		break;
		case 3:wyszukiwanietyt();
		break;	
	} }while (!(i==4));
	
	return 0;
	
}
int menu(void){
	int k;
	printf("Biblioteka\n");
	printf("1.Wprowadzanie danych\n");
	printf("2.Wyszukiwanie po autorze\n");
	printf("3.wyszukiwanie po tytule\n");
	printf("4.Koniec\n");
	printf("Dokonaj wyboru:\n");
	scanf("%d", &k);
	return k;}
	

void wprowadzanie(void){
	int i;

	
	for(i=0;i<MAKS;i++){
		
		printf("Podaj autora\n");
		gets(autor[i]);
		if(!strcmp(autor[i],"koniec")) break;
		printf("Podaj tytul\n");
		gets(tytul[i]);
		printf("podaj wydawnictwo \n");
		gets(wydawnictwo[i]);
	}	
	
}

void wyszukiwaniea(void){
	int i;
	char podaja[40];
	printf("podaj autora\n");
	gets(podaja);
	i=0;
	for(i=0;i<MAKS;i++){
		if(!strcmp(autor[i], podaja)) {printf("Tytuł %s", tytul[i]);
		printf("Wydawnictwo %s", wydawnictwo[i]); break;
		}
	}
		
}
void wyszukiwanietyt(void){
	int i;
	char podajtyt[40];
	printf("podaj tytul\n");
	gets(podajtyt);
	i=0;
	for(i=0;i<MAKS;i++){
		if(!strcmp(tytul[i], podajtyt)) {printf("Autor %s", autor[i]);
		printf("Wydawnictwo %s", wydawnictwo[i]); break;
		}
	}
	
}

<code class="c"> - msm

1

Być może w buforze jest jeszcze znak nowej linii lub coś innego.

1

http://stackoverflow.com/questions/1502562/gets-does-not-work

edit:
przykładowe czyszczenie inputu:

#include <stdio.h>
#include <stdlib.h>
 
int main() {
	int k;
	scanf("%d", &k);
	while (fgetc(stdin) != '\n');
	 
	char buffer[100];
	fgets(buffer, 100, stdin);
	printf("Buffer: %s", buffer);
	 
	return 0;
}
0

Można też prościej:

#include <stdio.h>
#include <stdlib.h>
 
int main()
  {
    int k;
    scanf("%d ", &k); // SPACJA PO %d
 
    char buffer[100];
    fgets(buffer, 100, stdin);
    printf("Buffer: %s", buffer);
    return 0;
  }

z tym że ma swoje wady. Można też użyć:

scanf(" ");
0

dzieki:)

było zrozumiałe ogólne przesłanie z małym zapasem do mnie dotarło, dzieki ;)

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