Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

C, riktig bruk av if og scanf


Gjest Slettet+45613274

Anbefalte innlegg

Gjest Slettet+45613274

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

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+45613274

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.

Lenke til kommentar
Gjest Slettet+45613274

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.

Lenke til kommentar
Gjest Slettet+45613274

 

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.

Lenke til kommentar

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...