Valaki le tudná írni, hogy mi a hiba az alábbi c-s kódban?
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");
}
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.
Az a=a++ annyit teszt, hogy visszaadja az a értékét, majd megnöveli eggyel.
a=5;
a=a++ // a=5, ++a
É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)
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.
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.
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
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;
// 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);
}
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!