Błąd w funkcji ( switch, while)


(Piotrbov) #1

Witam, mam problem z pewną częścią mojego programu, który ma za zadanie edytować tagi ID3v1 mp3.

void edit(char location[100])

{


union writef

    {

	char title[61];

	char artist[61];

	char album[61];

	char year[5];

	char comment[61];

	char genre;

    }write;


	char a,b;

	FILE *f_mp3;

	f_mp3=fopen(location,"r+");

	do

	{

		printf("Co chcesz zedytowac?\n");

		printf("1 - Tytul, 2 - Artysta, 3 - Nazwa utworu, 4 - Rok wydania\n"

		"5 - Komentarz, 6 - Typ muzyki\n");

		scanf("%c",&a);

		switch(a)

		{

		  case '1':

			fseek(f_mp3,-125,SEEK_END);

    			printf("Wpisz nowy tytul\n");

    			gets(write.title);

    			fputsol(write.title,f_mp3);

    			fflush(stdin);

			break;

		  case '2':

			fseek(f_mp3,-95,SEEK_END);

    			printf("Wpisz nowego wykonawce\n");

    			gets(write.artist);

    			fputsol(write.artist,f_mp3);

    			fflush(stdin);

			break;

		  case '3':

			fseek(f_mp3,-65,SEEK_END);

    			printf("Wpisz nazwe albumu\n");

    			gets(write.album);

    			fputsol(write.album,f_mp3);

    			fflush(stdin);

			break;

		  case '4':

			fseek(f_mp3,-35,SEEK_END);

    			printf("Wpisz nowy rok wydania\n");

    			gets(write.year);

    			fputsol(write.year,f_mp3);

    			fflush(stdin);

			break;

		  case '5':

			fseek(f_mp3,-31,SEEK_END);

    			printf("Wpisz komentarz\n");

    			gets(write.comment);

    			fputsol(write.comment,f_mp3);

    			fflush(stdin);

			break;

		  case '6':

			write.genre=genreadd(f_mp3);

    			fseek(f_mp3,-1,SEEK_END);

    			fputc(write.genre,f_mp3);

   			fflush(stdin);

			break;

		}

		printf("Czy chcesz dalej edytować? Wpisz t jesli chcesz.\n");

		b=getchar();

		if(b=='t')

		a=='1';

		else

		{

		a='b';

		fclose(f_mp3);

		}

	}while(a=='1' || a=='2' || a=='3' || a=='4' || a=='5' || a=='6');


}

Chodzi o to, że program omija miejsce w którym trzeba wpisać znak, więc omija całego case, jak również funkcja do ... while mi nie wchodzi bo nie zależnie co zrobię to mi wychodzi. A te rzeczy muszą działać.


([alex]) #2

Wyjaśnij co rozumiesz pod hasłem omija?


(Marcin Obala) #3

Spróbuj zamiast char a dać int a i wczytać zwyczajnie liczbę, w case dasz po prostu 1 zamiast '1'. Może we wcześniejszej części programu której nie widać tutaj wciskasz enter i scanf wczytuje tego entera do "a". Ale jeśli chcesz mieć chary to możesz spróbować dać dwa razy pod rząd scanf("%c",&a);


([alex]) #4

Marcin511 , opowiedz mi od kiedy to scanf("%c",&a); wczyta w zmienną entera?