Kezdőoldal » Számítástechnika » Programozás » C nyelv struktúrában mi lehet...

C nyelv struktúrában mi lehet a gond?

Figyelt kérdés

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.



2016. máj. 29. 21:46
 1/6 anonim ***** válasza:
lehet bent maradt egy \n a bufferben
2016. máj. 29. 21:50
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
amúgy mért nem %s string beolvasásakor?
2016. máj. 29. 21:52
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:

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

2016. máj. 29. 22:40
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:

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.

2016. máj. 29. 23:13
Hasznos számodra ez a válasz?
 5/6 A kérdező kommentje:
Köszönöm a válaszokat
2016. máj. 30. 00:34
 6/6 A kérdező kommentje:
#1, azért nem %s, mert akkor csak az első szóközig olvasna, és nem olvasná be pl. az ownernél a teljes nevet.
2016. máj. 30. 00:42

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!