petla if

0

Mógłby ktoś podpowiedzieć , czemu mi na wyjsciu zawsze 1 wychodzi?

int a, b, c, d, e, f, g, h, j, k;
	int x ;
	x = 0;
	
	scanf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n", &a, &b, &c, &d, &e, &f, &g, &h, &j, &k);
	int tab_odp[10] = { 2,3,2,3,3,1,3,1,2,1 };
	if(tab_odp[0]==a)  x=x+1; 
	else if (tab_odp[1] == b)   x = x + 1;
	else if (tab_odp[2] == c)   x = x + 1;
	else if (tab_odp[3] == d)   x = x + 1;
	else if (tab_odp[4] == e)   x = x + 1;
	else if (tab_odp[5] == f)   x = x + 1;
	else if (tab_odp[6] == g)   x = x + 1;
	else if (tab_odp[7] == h)   x = x + 1;
	else if (tab_odp[8] == j)   x = x + 1;
	else if (tab_odp[9] == k)   x = x + 1;

1

Może wpisujesz błędne odpowiedzi?

BTW: if nie jest operatorem.

1

Co to ma robić?
Za mało kodu.
Jakie dane wejściowe?

0
MarekR22 napisał(a):

Co to ma robić?
Za mało kodu.
Jakie dane wejściowe?


int main()

{
	FILE *fd = NULL;
	
	char  bufor[256];
	
	fd= fopen("testzWF.txt", "rt");
	if (!fd) {
		exit(-1);
	}
	while (fgets(bufor, 256, fd)) {

		printf("%s", bufor);
	}
	int a, b, c, d, e, f, g, h, j, k;
	int x ;
	x = 0;
	printf("\nProsze wybrac jedna odpowiedz do kazdego z 10 zadan testowych(wpisac 1 ,2 lub 3).\nCo do tego:odpowiedzi prosze wpisywac po kolei,czyli od 1 do 10 zadania testowego.\nPo kazdej odpowiedzi prosze nacisnac ENTER\n");
	scanf("%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n", &a, &b, &c, &d, &e, &f, &g, &h, &j, &k);
	int tab_odp[10] = { 2,3,2,3,3,1,3,1,2,1 };
	if(tab_odp[0]==a)  x=x+1; 
	else if (tab_odp[1] == b)   x = x + 1;
	else if (tab_odp[2] == c)   x = x + 1;
	else if (tab_odp[3] == d)   x = x + 1;
	else if (tab_odp[4] == e)   x = x + 1;
	else if (tab_odp[5] == f)   x = x + 1;
	else if (tab_odp[6] == g)   x = x + 1;
	else if (tab_odp[7] == h)   x = x + 1;
	else if (tab_odp[8] == j)   x = x + 1;
	else if (tab_odp[9] == k)   x = x + 1;
	else x = x + 0;
	
	printf("\nZ 10 odpowiedzi masz %d prawidlowych", x);
	printf("\nWynik procentowy wynosi %d%%", x * 10);
	fclose(fd);
	fd = NULL;
	return 0;
	system("pause");
}
1

czemu mi na wyjsciu zawsze 1 wychodzi?

Zgaduje że x jest Twoim wyjściem. else if działa w ten sposób, że jeśli jeden z tych warunków się sprawdzi to pozostałe są pomijane. Nie ważne w jaki warunek wejdziesz to do zera dodajesz jeden, co zawsze da Ci jeden. Jak zamienisz te wszystkie else if na if to nie pominiesz sprawdzenia kolejnych warunków.

0

Twoje 10 cyfr nie zostanie sprawdzonych. Dostajesz zawsze 1, bo jak wpisujesz np. same dwójki to
if 2 == 2 -> da 1
i koniec petli

zle napisales ifa

skasuj te else i zobacz co się stanie :)

0
several napisał(a):

czemu mi na wyjsciu zawsze 1 wychodzi?

Zgaduje że x jest Twoim wyjściem. else if działa w ten sposób, że jeśli jeden z tych warunków się sprawdzi to pozostałe są pomijane. Nie ważne w jaki warunek wejdziesz to do zera dodajesz jeden, co zawsze da Ci jeden.

no to bez sensu, jaka petla w tym przypadku będzie najlepsza?

0

Zamień te wszystkie else if na if.

2
Pablo1999 napisał(a):

no to bez sensu, jaka petla w tym przypadku będzie najlepsza?

Jakakolwiek. Jak będzie 1000 pytań to napiszesz 1000 ifów? (i 1000 zmiennych do wczytywania?)

0

Po pierwsze, IF to nie pętla...

1

Nie rozumiem po co w ogóle operacje na jakimś pliku ale nie ważne. Twój problem można zrobić za pomocą prostej pętli

for (int i = 0; i < 10; ++i) 
    {
        scanf_s("%d", &Odpowiedzi[i]);
        if (Klucz[i] == Odpowiedzi[i])  ++x;
    }

Jeśli potrzebujesz mieć zapisane odpowiedzi a jak nie to nawet prościej:

 for (int i = 0; i < 10; ++i) 
    {
        scanf_s("%d", &aktualnaodpowiedz);
        if (klucz[i] == aktualnaodpowiedz)  ++x;
    }

Oczywiście pomijam kwestie ,że nie masz ,żadnych zabezpieczeń przed złymi danymi itd. Dostałeś tylko pętlę reszta sam musisz sobie dorobić bo inaczej się nie nauczysz.

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