- Projektor topic
- OLED monitor topic
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Kormányok / autós szimulátorok topikja
- Samsung LCD és LED TV-k
- A Sony szerint a PlayStation 5 konzolokat még nem érinti a memóriahiány
- 5.1, 7.1 és gamer fejhallgatók
- Mini-ITX
- NVIDIA GeForce RTX 4060 / 4070 S/Ti/TiS (AD104/103)
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
Új hozzászólás Aktív témák
-
Rickazoid
addikt
Üdv!
Ismét volna némi C problémám. Továbbra is táblázat, ezúttal a feltöltése nem akar működni. A cél az lenne, hogy előre nem meghatározott méretű tömbökbe kérek be értékeket, szövegeket és újabb értékeket.
A példaprogramom a következőképp néz ki:int main()
{
int i=0,j=0,k=0,idx[MAXIDX];
char c='y',name[MAXIDX][NAMELEN];
float data[MAXIDX];
while(c=='y')
{
printf("ID: ");
scanf("%d",&idx[i]);
printf("Name: ");
while(getc(stdin)!='\n'){} //ha nem írom be, a következő while ciklus nem fut le
while(name[i][j]=getchar()!='\n')
j++;
printf("Data: ");
scanf("%f",&data[i]);
printf("New? (y/n): ");
while(getc(stdin)!='\n'){} //ha nem írom be, a következő getchar() függvény nem fut le
c=getchar();
i++;
}
printf("\nWriting out:\n\n");
for(j=0;j<i;j++)
{
printf("ID: %d\n",idx[j]);
printf("Name: ");
for(k=0;k<NAMELEN;k++)
{
putchar(name[j][k]);
}
printf("\nData: %.2f\n",data[j]);
}
printf("\n");
system("pause");
return 0;
}A nagybetűs változók előre vannak definiálva.
A gond az, ahogy azt a kódba is beírtam, hogy bizonyos helyzetekben a program továbblép karakterbeolvasás nélkül, illetve a szöveget a name tömbből nem írja ki, esetleg el sem tárolja.
Viszont ha ezt írom:int main()
{
int i=0,j=0,k=0,idx[MAXIDX];
char c='y',name[MAXIDX][NAMELEN];
float data[MAXIDX];
while(c=='y')
{
printf("ID: ");
scanf("%d",&idx[i]);
printf("Name: ");
while(getc(stdin)!='\n'){} //ha nem írom be, a következő while ciklus nem fut le
while(name[i][j]=getchar()!='\n')
j++;
printf("New? (y/n): ");
c=getchar();
i++;
}
printf("\nWriting out:\n\n");
for(j=0;j<i;j++)
{
printf("ID: %d\n",idx[j]);
printf("Name: ");
for(k=0;k<NAMELEN;k++)
{
putchar(name[j][k]);
}
}
printf("\n");
system("pause");
return 0;
}vagyis mindössze lehagyom a lebegőpontos szám beolvasását, nem kell a második while(getc(stdin)!='\n'){}, de ilyenkor meg ha a c értéke 'n' lesz, egy plusz entert kell nyomnom, hogy továbblépjen. Azok alapján, amit tanultam, ennek és az ez előttinek is jónak kéne lennie, se plusz entereket nem kéne várnia, se while(getc(stdin)!='\n'){} ügyeskedésre nem kéne, hogy szükség legyen és a szövegeket is el kéne tárolnia. Átnéztem az órai, működő példákat (persze egyik sem komplexebb pár sorosnál), de nem találom, hogy miért fut ez a program másképp. A scanf() és a getchar() valahogy ütközik egymással? A name[x][y] alak nem alkalmas szövegek tömbbe tárolására? (karakterek két dimenziós tömbje... miért nincs string típusú változó C-ben?)
Az órai példa ez volt szövegekre:char i,name[5][80];
for(i=0;i<5;i++)
{
printf("Type a word: ");
scanf("%s",name[i]); //nem kell & jel, mivel a nev[i] itt eleve mutató
//scanf() esetén a space is megszakító karakter,
//ezzel nem lehet szóközöket tartalmazó sorokat beolvasni
}
for(i=0;i<5;i++)
printf("%s\n",name[i]);Ebből sajnos nem jövök rá, hogy tudnék a getchar() függvénnyel beolvastatni több szöveget is egy tömbbe, ha a scanf() nem alkalmas szóközök olvasására, de nekem azok is kellenek.
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Latitude 9330 2in1 13.3" QHD+ IPS érintő i5-1240U 16GB 256GB NVMe magyarított (lézerezett) vbill gar
- Üzletből,garanciával,MSI Alpha Gamer 17 Ryzen 9-7945 16mag-32Szál/32GB RAM/1TB NVME SSD/RTX 4070/4K
- Lenovo Legion 9 16" 3.2K Mini LED Laptop! i9-13980HX / RTX 4090 / 32GB DDR5 / 2TB NVMe! BeszámítOK
- Új Tenchnics A800 Bluetooth Hifi fejhallgató zajszűrővel.
- Kingston FURY 32GB (2x16GB) DDR4 3200MHz CL16 KIT Beast Black - 1 év magyar bolti garival! -
- Használt WDR Full HD autós menetrögzítő kamera / 12 hó jótállás
- Samsung Galaxy A53 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
- GYÖNYÖRŰ iPhone X 64GB Black -1 ÉV GARANCIA - Kártyafüggetlen, MS3586
- Bomba ár! Lenovo ThinkPad T460s - i5-6GEN I 8GB I 192GB SSD I 14" FHD I Cam I W11 I Garancia!
- BESZÁMÍTÁS! Gigabyte Vision OC RTX 3080 10GB videokártya garanciával hibátlan működéssel
Állásajánlatok
Cég: Central PC számítógép és laptop szerviz - Pécs
Város: Pécs
Cég: Laptopműhely Bt.
Város: Budapest


