Kezdőoldal » Számítástechnika » Programozás » Mi a hiba az alábbi programkód...

Mi a hiba az alábbi programkódban?

Figyelt kérdés

Nem tudok rájönni hol a hiba :D


#include <stdio.h>

#include <stdlib.h>

#include <string.h>


int main(int argc, char** argv) {

int i = 0, j = 0;

struct felhasznalo {

char nev[20];

int eletkor;

};

struct felhasznalo diak[5];

do {

printf("neve: ");

scanf("%s", diak[i].nev);

printf("kora: ");

scanf("%d", diak[i].eletkor);

i++;


} while (i < 5);

i = 0;

do {

printf("Az 1. diák neve: %s, életkora: %d", diak[i].nev, diak[i].eletkor);

i++;

} while (i < 5);


return (EXIT_SUCCESS);



2016. dec. 6. 15:44
 1/7 anonim ***** válasza:

Miért, mi a hiba jelenség?

Fordítási hiba van? Mit ír a fordító?

Futás közbeni hiba van? Mit ír ki, vagy mi működik másképp, mint várnád?

2016. dec. 6. 15:59
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:
Semmi.
2016. dec. 6. 16:01
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:

scanf("%d", &diak[i].eletkor);


A fenti sort javítottam. Kimaradt az & jel. Mert ugye a memóriacímet kell megadni, ahova beolvassa. Stringnél működik, de integernél kell elé az & jel.

2016. dec. 6. 16:03
Hasznos számodra ez a válasz?
 4/7 SimkoL ***** válasza:
Nem értem, hogy miért kell do ..while ciklust használni amikor tudjuk, hogy meddig kell mennie a ciklusnak, nincs, nem jön létre más kilépési feltétel a ciklusmagon belül. Bár nem hiszem, hogy futási időben eltérés lenne egy for ciklussal szemben, de valahogy bántja a szemem.
2016. dec. 6. 16:46
Hasznos számodra ez a válasz?
 5/7 anonim ***** válasza:

2 hiba van benne - ezeket a fordító ki is jelzi:

1. scanf("%d", diak[i].eletkor); - mint előzőleg említették, a scanf memóriacímet vár (A GCC fordító hibaüzenete: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]).

Szóval helyesen:

scanf("%d", &diak[i].eletkor);


2. A legvégéről hiányzik a záró kapcsos zárójel (}).


Pár javaslat:

* A bevitelkor add meg, hogy PONTOSAN mit kérsz be.

Szóval ezek helyett:

printf("neve: ");

printf("kora: ");


Inkább ez:

printf("%d diák neve: ",i);

printf("%d diák kora: ",i);


Meg az elején - a cikluson kívül - felszólíthatod a felhasználót:

printf("Add meg a diákok adatait!\n");


* A kiíráskor a sorok végén tegyél sorvége jelet - nélküle összefolyik az egész:

printf("Az 1. diák neve: %s, életkora: %d\n", diak[i].nev, diak[i].eletkor);

2016. dec. 6. 18:20
Hasznos számodra ez a válasz?
 6/7 A kérdező kommentje:

megvan :D

[link]

2016. dec. 7. 18:14
 7/7 anonim ***** válasza:
És még egy kis nüansz: a j változó helyett nyugodtan írhatsz i+1-et is - egy változóval kevesebbet kell deklarálni, illetve nem kell azt feleslegesen növelni.
2016. dec. 7. 19:06
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!