Gå til innhold

C, riktig bruk av if og scanf


Gjest Slettet+45613274

Anbefalte innlegg

Gjest Slettet+45613274
Skrevet

Heisann,

 

Sliter med en kode som ikke gjør det jeg vil (den kompilerer):

		if(scanf("%d %d %d %d", &matrise[k][0],&matrise[k][1],&matrise[k][2],&matrise[k][3]) != 4)
			{
				printf("Du må skrive 4 tall separert med mellomrom\n");
				return EXIT_FAILURE;

Målet er altså at user skal gi 4 tall separert med mellomromstasten og så trykke enter. Om input er feil (færre tall, flere tall, char osv.) skal man gå i if-loopen. Uansett hva jeg prøver så går den enten alltid i if-loopen eller aldri...

 

k i matrisen kommer fra en annen variabel i en for-statement, men jeg ønsker ikke å vise hele koden, av åpenbare grunner... :)

 

--hjelp

Videoannonse
Annonse
Skrevet

Hvis jeg ikke husker feil så kan du ikke bruke scanf til å lese en 'setning'. scanf stopper på første whitespace.

Bruk heller fgets til å lese inn, og så parser du input etterpå.

Gjest Slettet+45613274
Skrevet

Hvis jeg ikke husker feil så kan du ikke bruke scanf til å lese en 'setning'. scanf stopper på første whitespace.

Bruk heller fgets til å lese inn, og så parser du input etterpå.

Takk for svar. Men slik jeg har skjønt det skal man bruke fgets når man har strings. 

Scanf fungerer fint med ints, se her f.eks. https://stackoverflow.com/questions/1412513/getting-multiple-values-with-scanf

 

Problemet er at jeg egentlig ikke forstår helt hvordan if statementet blir interpretert av kompilatoren. Derfor mistenker jeg at det er der feilen ligger.

Gjest Slettet+45613274
Skrevet

Print ut resultatet av scanf direkte for å se hva det er for forskjellige input.

Problemet er at om jeg skriver ett tall og trykker enter så venter scanf bare på neste verdi så f.eks jeg skriver:

1

2

3

4

1

2

3

4

 

Så printer den: (som er korrekt!)

1 2 3 4

1 2 3 4

 

 

Samme om jeg skriver dette:

1 2 3 4

1 2 3 4

 

Så printer den: (Også korrekt!)

1 2 3 4

1 2 3 4

 

Poenget er at den skal gi feil i første eksempelet. Noe den ikke gjør.

Gjest Slettet+45613274
Skrevet

 

Poenget er at den skal gi feil i første eksempelet. Noe den ikke gjør.

Da må du nok bruke en annen funksjon for å lese inn strengen.

 

Da tenker du på fgets eller? Finnes det andre? Er relativt ny på dette.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...