Segítene valaki az alábbi, egyébként könnyű C programozási házimban? (egy számomra érthetetlen hiba van benne)
A feladat az, hogy bekérjek két integer számot, és azt visszaírjam.
Tudom, marha egyszerű feladatnak tűnik, de valahogy mégse megy : valamilyen tömbös hibába ütközhettem a 'scanf()' parancs kapcsán.
Itt a (hibás) kódom:
#include <stdio.h>
int main(void)
{
//const char *c[2]={"first","second"};
int a[2],b[2];
for(b[0]=0;b[0]<2;b[0]++)
{
//printf("Type the %s integer : ",*c[b[0]]);
printf("Type the %i. integer : ",b[0]+1);
scanf("%i",&a[b[0]]);
}
for(b[1]=0;b[1]<2;b[1]++)printf("%i. added integer : %i\n",b[1]+1,a[b[0]]);
system("PAUSE");
return 0;
}
A számok bekérése formálisan működik, de valahogy mégis az a[] kételemű 1D-s tömböm elemei ugyanúgy egy 250 ezer körüli értékkel töltődnek fel... fogalmam sincs, hogy miért.
Gondolom bizonyára valamit a 'scanf()' parancsnál szúrok el, de nem tudom, hogy itt milyen jelölésre lenne szükség.
Kérem, segítsen valaki, aki haladó szinten ért a sima C nyelvhez!!! :O
Lehetőleg a kérdésre válaszoló kommenteket írjatok, kérem szépen!
Thanks in advance! :)
Kedves Kérdező!
Látom, hogy problémát okozott, hogy printf nélkül old meg a feladatot. Szívesen segítek megoldani a problémát, íme az én megoldásom:
#include <stdio.h>
void writeString(const char * str) {
unsigned int index = 0;
while (str[index] != 0) {
putchar(str[index]);
index++;
}
}
void writeInt(int num) {
if (num < 0) {
putchar('-');
num = -num;
}
int divider = 1000000000;
while (num / divider == 0) {
divider /= 10;
}
while (num > 0) {
putchar((num / divider) + '0');
num %= divider;
divider /= 10;
}
while (divider > 0) {
putchar('0');
divider /= 10;
}
}
void write(const char * index, int num) {
writeString(index);
writeString(" added integer : ");
writeInt(num);
writeString("\n");
}
int main(void)
{
const char *c[2]={"First","Second"};
int a[2],b[2];
for(b[0]=0;b[0]<2;b[0]++)
{
writeString("Type the ");
writeString(c[b[0]]);
writeString(" integer : \n");
scanf("%i",&a[b[0]]);
}
for(b[1]=0;b[1]<2;b[1]++) {
write(c[b[1]], a[b[1]]);
}
return 0;
}
Ahogy látod, ez nem tartalmaz printf-et, csupán a szabványos put függvényt.
Persze ha neked még a put használata is zavaró, akkor erre
az esetre megírtam neked egy put nélküli megoldást is, igaz egyelőre csak linuxon működik:
#include <stdio.h>
#define BUFF_SIZE 100
void put(char ch) {
static char buffer[100];
static int bufferIndex = 0;
buffer[ bufferIndex ] = ch;
bufferIndex++;
if (bufferIndex >= BUFF_SIZE || ch == '\n') {
asm("movl $4, %%eax\n\t"
"movl $1, %%ebx\n\t"
"int $0x80": : "c"(buffer), "d"(bufferIndex) :);
bufferIndex = 0;
}
}
void writeString(const char * str) {
unsigned int index = 0;
while (str[index] != 0) {
put(str[index]);
index++;
}
}
void writeInt(int num) {
if (num < 0) {
put('-');
num = -num;
}
int divider = 1000000000;
while (num / divider == 0) {
divider /= 10;
}
while (num > 0) {
put((num / divider) + '0');
num %= divider;
divider /= 10;
}
while (divider > 0) {
put('0');
divider /= 10;
}
}
void write(const char * index, int num) {
writeString(index);
writeString(" added integer : ");
writeInt(num);
writeString("\n");
}
int main(void)
{
const char *c[2]={"First","Second"};
int a[2],b[2];
for(b[0]=0;b[0]<2;b[0]++)
{
writeString("Type the ");
writeString(c[b[0]]);
writeString(" integer : \n");
scanf("%i",&a[b[0]]);
}
for(b[1]=0;b[1]<2;b[1]++) {
write(c[b[1]], a[b[1]]);
}
return 0;
}
Az általam kiadott tesztelő program elfogadja mindkét megoldást. Ami a te megoldásodban nem volt jó, az az, hogy nem szabad kiírnod, hogy "Kerem az 1. szamot", mivel ez az 1 a kimeneten jelenik meg, a tesztelő pedig válasznak hiszi. Ezért cseréltem le a kódodban a kiírást a main függvényben úgy, hogy csak 2 helyen írjon ki számot.
Viszont ha már itt vagyok, akkor had kérdezzem meg, hogy az alábbi megoldás miért nem megfelelő a számodra, hiszen ez a legegyszerűbb, és a tesztelő is elfogadja?
#include <stdio.h>
int main(void)
{
int a, b;
printf ("Az elso szam: ");
scanf ("%d", &a);
printf ("Az masodik szam: ");
scanf ("%d", &b);
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
Valóban az a célom a tesztelővel, hogy nektek segítsek, hiszen később ennél jóval összetettebb házikat kaptok majd, nyilván szeretnél biztos lenni benne, hogy amit beadsz, azt valóban elfogadjuk.
Üdvözlettel: Smidla József
Hodor!
Hodor, Hodor.
Hodor?
Hodor, Hodor!
Szerintem ezek után bekommentezhetnéd a programod valamelyik sorába, hogy
// #include <smidla.h>
mert ilyen tökéletes megoldás csak ott szerepel :D
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!