Kezdőoldal » Számítástechnika » Programozás » Valaki le tudná írni, hogy mi...

Valaki le tudná írni, hogy mi a hiba az alábbi c-s kódban?

Figyelt kérdés

Nosz azt szeretném eléri hogy a begépelt számokból kiírja hogy mennyi pozitív van(még nagyon kezdő vagyok, szóval figyelem olyat láthattok ami sértené a szemeteket!:D)


#include <stdio.h>

void main(void){

int a;

if (getchar()>47 && getchar()>58){//az ascii kódan 47 és 58 között vannak a számok

do // csak akkor jöjjön ide be ha a getchar szám


{

a=a++


}while (getchar()%2==0); //adjon ahoz egyet ha a bekért szám páros

}

printf("a");



}



2015. okt. 10. 17:02
1 2
 1/11 A kérdező kommentje:
Bocsi nem pozitív, hanem páros.
2015. okt. 10. 17:05
 2/11 anonim ***** válasza:

A main-nek int a visszatérési értéke, oké, hogy megeszi a fordító a voidot, de írd azt.

Az "a" változót nem inicializálod, memóriaszeméttel dolgozol.

A getchar()-t 2x hívod meg, szóval 2 különböző byte-ra ellenőrzöl -> tárold el egy változóba.

A feltétel megint nem jó, 47-nél ÉS 58-nál nagyobb, ami 58-nál nagyobb, ez fordítva van.

A while-ban ismét egy getchar(), nem vágom.

A karakter értékét modulo-zod, ami éppen jó 2-vel (de csak mert 48='0').

Az a=a++ az mintha úgy rémlene, hogy undefined, de javítsatok ki.

A printf-nek format string kellene, ez egy 'a' betűt fog kiírni.

2015. okt. 10. 17:16
Hasznos számodra ez a válasz?
 3/11 anonim ***** válasza:

Az a=a++ annyit teszt, hogy visszaadja az a értékét, majd megnöveli eggyel.


a=5;

a=a++ // a=5, ++a

2015. okt. 10. 17:48
Hasznos számodra ez a válasz?
 4/11 anonim ***** válasza:

Én tudom, hogy mit jelent, viszont:

1. nincs sok értelme

2. undefined = nem tudod, mi lesz az eredménye, mivel két sequence point között kétszer ad értéket egy változónak


(tehát előre nem tudod, hogy a a=5; ++a sorrendben, vagy fordítva)

2015. okt. 10. 18:04
Hasznos számodra ez a válasz?
 5/11 anonim ***** válasza:
0%

Mindig ugyan abban a sorrendben fog végrehajtódni. Leírom érhetőbben.


a=a++;


Létrehoz egy ideiglenes változót aminek az értéke "a" lesz, megnöveli az "a" értékét 1 -el, majd a temp változót visszaadja, ezután végrehajtódik az értékadás. Tehát "a" értéke végső soron ugyan annyi marad amennyi volt.

2015. okt. 10. 18:55
Hasznos számodra ez a válasz?
 6/11 anonim ***** válasza:

Nézd, nem kell semmit "érthetőbben" elmagyarázni, főleg, mert a kérdezőt kavarod be vele.

Szerintem világos, amit leírtam, hiába írod le, hogy szerinted milyen sorrendben fog történni, ha egyszer nem.


Hozzátenném, hogy ha gcc-vel lefordítom, nálam megnöveli 1-gyel a változó értékét, ami szintén nem téged igazol.

2015. okt. 10. 19:07
Hasznos számodra ez a válasz?
 7/11 anonim ***** válasza:
Nálam 5, tehát valóban nem meghatározott, ettől függetlenül logika szerint 5 -nek kellene lennie.
2015. okt. 10. 19:59
Hasznos számodra ez a válasz?
 8/11 anonim ***** válasza:

Itt a generált assembly kód az a=a++ -ra aminél 6 lesz:


//int a = 5;

mov dword ptr [a],5

//a = a++;

mov eax,dword ptr [a]

mov dword ptr [a],eax

mov ecx,dword ptr [a]

add ecx,1

mov dword ptr [a],ecx

2015. okt. 10. 20:06
Hasznos számodra ez a válasz?
 9/11 anonim ***** válasza:

Ami kódban így néz ki:


int a = 5;


int temp_1 = a;

a = temp_1;

int temp_2 = a;

temp_2 = temp_2 + 1;

a = temp_2;

2015. okt. 10. 20:08
Hasznos számodra ez a válasz?
 10/11 anonim ***** válasza:

// Remélem nem rontottam el semmit, nem próbáltam ki:

// (Az aláhúzásjelek csak a behúzást jelölik.)


#include <stdio.h>


int main(void)

{


int a=0;

char ch;


while ((ch = getchar()) > 47 && ch < 58)

__if ((ch+48)%2==0) ++a; // vagy a++, itt mindegy

printf("%d db paros", a);


}

2015. okt. 12. 17:55
Hasznos számodra ez a válasz?
1 2

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!