C nyelv struktúrában mi lehet a gond?
Hali, a következő alapprogramot írtam C-ben:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct car
{
char owner [100];
int year;
char type [100];
}record;
int main()
{
printf("Hello world!\n");
record first;
printf("First car's owner: \n");
scanf("%[^\n]", first.owner);
printf("First car's year: \n");
scanf("%d", &first.year);
printf("First car's type: \n");
scanf("%[^\n]", first.type);
printf("The first car's owner is: %s, year: %d, type: %s", first.owner, first.year, first.type);
return 0;
}
Amikor lefuttatom, csak az Owner-t és a year-t kéri be, utána kérdezi még a type-ot is, azonban a hozzá tartozó scanf-et kiugorja, és egyből kiírja az utolsó printf-et.
A %d nem olvassa be a számot követő whitespace-t ez esetben az új sor karaktert (\n). Amikor az autó típusát olvasod be akkor az \n-ig olvas ami még a bufferben maradt előzőleg. Vagy dobd ki a bufferből, vagy szólj a scanf-nek hogy whitespace-szel kezdődik a beolvasás és hagyja azt figyelmen kívül:
scanf("%d", &first.year); getchar(); //kidobjuk a \n-t
printf("First car's type: \n");
scanf("%[^\n]", first.type);
vagy
scanf("%d", &first.year);
printf("First car's type: \n");
scanf(" %[^\n]", first.type); //A szóköz jelzi hogy whitespace-szel kezdődik
scanf() helyett fgets() függvénnyel ildomosabb beolvasni. Például: fgets(first.owner,100,stdin);
A második paraméter a maximum beolvasható karakteret számát jelöli, viszont sörtörésnél mindenképp megáll.
String-et olvas be, de azt könnyen átalakíthatod számmá atoi() segítségével.
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!