Hogy kell C nyelvben megoldani, hogy csak számokat olvassunk be, betű beírása esetén hibát jelezzen? Alul még egy probléma.
A fenti probléma mellett, nem tudok rájönni mi ebben a rossz.
Mutatókkal egy függvényben ellenőrzöm,hogy prim-e a szam, es ha igen növelek egy valtozot:
void prim(int *p, int *x, int *y)
{ int i;
For (i=2;i=*p-1;++i)
{ If ((*p%i)==0)
{++(*x); //azaz nem prim
Return;}
}
++(*y); // ha nem talalt olyan szamot, amivel oszthato akkor prim
}
Valamiert minden szamot nemprimnek eszlel. Mar az i-nel problema lehet, mert kiirattam a ciklus elejen, es ha a vizsgalando szam 7, akkor az nem a megadott 2 kezdőertektol indul,hanem 6-tól, raadasul el is tudja vele osztani, mert rogton utana kilep a ciklusbol? Mi lehet a problema?
Talán a for ciklus feltétele:
i=*p-1 <- ez itt nem lesz jó
For feltétele:
i<*p
Te ugye "nem egyenlőt" akartál írni, az viszont != lenne.
De jobb a kisebb, mert az még véletlenül, egyéb programozási hiba esetén sem szalad túl a cikluson.
Amúgy nem kell addig menni, csak a négyzetgyökéig.
Tehát a négyzetgyöktől lefelé induljanak az osztók és 2-ig menjenek.
Rettentő ronda a függvényed, mivel mindent cím szerint adsz át. Nem illik ilyet tenni, csak ha nagyon kell.
Normális függvény inkább visszatérési értékben adja vissza az eredményt.
Beolvasás: csak POZITÍV EGÉSZ számokat szeretnél beolvasni?
Mert akkor csak számjegyet fogadj el, meg a záró karaktert.
Eleve az elgondolás is rossz, túl sokat csinál a függvényed.
Primséget is vizsgál és számol is, ennek két külön függvényben kellene lennie.
"i=*p-1 <- ez itt nem lesz jó"
Így van. Ez a bentmaradás feltétele, tehát akkor és addig hajtja végre a ciklusmagot, amíg ez igaz. Nálad csak akkor fut le a ciklusmag, ha első körben 2=*p-1, vagyis ha *p=3. Az összes többi számra elvileg semmit nem csinál a függvény.
A helyes megoldást feljebb már megadták.
"Így van. Ez a bentmaradás feltétele, tehát akkor és addig hajtja végre a ciklusmagot, amíg ez igaz. Nálad csak akkor fut le a ciklusmag, ha első körben 2=*p-1, vagyis ha *p=3. Az összes többi számra elvileg semmit nem csinál a függvény."
Ez pedig nem igaz. Az = értékadás nem összehasonlítás, amire te gondolsz az a ==. Az értékadás visszatérési értéke a kifejezés bal oldala. Akkor hamis ha *p-1 kiértékelve 0 (azaz p*==1), ha bármi más akkor igaz. Mivel i=2 a kezdeti érték, a kifejezés mindig igaz lesz és a ciklusból akkor lép ki ha a *p%i==0 kifejezés igazzá válik. Ha egy prímszámról van szó akkor i==*p esetén lép ki.
6.5.16.3:
An assignment expression has the value of the left operand after the assignment, but is not an lvalue. The type of an assignment expression is the type the left operand would have after lvalue conversion.
6.3.1.2:
When any scalar value is converted to _Bool, the result is 0 if the value compares equal to 0; otherwise, the result is 1.
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!