---
title: "Varför blir det fel?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/110468-varför-blir-det-fel"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Proton"
published: "2004-08-31T21:15:47.000Z"
updated: "2004-09-01T13:15:41.000Z"
replies: 7
views: 424
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/110468-varför-blir-det-fel"
---

# Varför blir det fel?

## #1 — Proton, 2004-08-31T21:15Z

Hej,

Det är 3:e timman med C någonsin för mig just nu så det blir säkert enkelt för ngn av er att lista ut detta.

Jag har detta program som jag pillat i hop för att testa booleska operatorer...

```
#include <stdio.h>

int main()
{
	char bolaget;
	char korkort;

	printf("Far du kopa sprit pa bolaget? j/n: ");
	scanf("%s", &bolaget);

	printf("Har du korkort? j/n: ");
	scanf("%s", &korkort);
    
	if( bolaget == 'j' && korkort == 'j' )
	   printf("\nDu ar alltsa 20 ar eller over och har korkort!\n");
	else if( bolaget != 'j' && !(korkort == 'j') )
	   printf("\nDu ar inte 20 ar gammal och saknar korkort! Looser....\n");
                else
	   printf("\nDu ar 20 ar eller over, eller sa har du korkort.\n");   

	return 0;
}
```

Om jag gör som ovan verkar aldrig variabeln bolaget att tildelas ngt.

Vänder jag däremot på dem så att det blir..

```
#include <stdio.h>

int main()
{
	char bolaget;
	char korkort;

	printf("Far du kopa sprit pa bolaget? j/n: ");
	scanf("%s", &korkort);

	printf("Har du korkort? j/n: ");
	scanf("%s", &bolaget);
    
	if( bolaget == 'j' && korkort == 'j' )
	   printf("\nDu ar alltsa 20 ar eller over och har korkort!\n");
	else if( bolaget != 'j' && !(korkort == 'j') )
	   printf("\nDu ar inte 20 ar gammal och saknar korkort! Looser....\n");
                else
	   printf("\nDu ar 20 ar eller over, eller sa har du korkort.\n");   

	return 0;
}
```

Så fungerar programmet precis som det ska?! Både korkort och bolaget tilldelas en character och det blir rätt i alla kombinationer.

Varför tusan blir det så? Vad är skillnaden? Editor & kompilator är från Dev-C++. Jag har INTE testat koden med annan kompilator för att utesluta det.

/Johnny

Permalänk: https://www.webforum.nu/p/110468

## #2 — niels, 2004-08-31T21:42Z

Kanske fungerar bättre om du läser in en char istället för en c-sträng:

scanf("%c", &korkort);

Permalänk: https://www.webforum.nu/p/1425117

## #3 — Proton, 2004-08-31T21:58Z

Provade det, men då läste programmet aldrig in nästa fråga.. 

Frågan..
scanf("%c", &bolaget); kan man ge ett svar på..

scanf("%c", &korkort); hoppas över... 

/Johnny

Permalänk: https://www.webforum.nu/p/1425122

## #4 — PeW, 2004-09-01T05:55Z

Men om du petar in en sträng (%s) beståendes av ett "j" eller "n" så blir det **2** tecken iom termineringstecknet som läggs in. Dvs att ett "j" är egentligen \[ j \| 0 \]. Så det du gör när du skriver 

```
printf("Har du korkort? j/n: ");
scanf("%s", &korkort);
```

är att du skriver över den första variabeln med variabel 'korkorts' terminering (NULL). Om det råkar fungera bara för att du vänder på steken är det bara för att du har **tur** som inte skriver över något signifikant i minnet. Samma program skulle då kunna ge segmentfel eller liknande om det kördes på en annan plattform.

Det är korrekt att istället använda %c. Alternativt att du deklarerar input variablerna som strängar istället eller använder en egen buffer för inmatningen. Du skulle även kunna snegla på getchar() snarare än scanf().

Permalänk: https://www.webforum.nu/p/1425172

## #5 — Proton, 2004-09-01T11:23Z

Tack PeW, jag är med på hur du menar.. Du skulle inte vilja utveckla (omvandla) koden ovan med getchar()? Vore hyggligt..

/Johnny

Permalänk: https://www.webforum.nu/p/1425308

## #6 — PeW, 2004-09-01T13:05Z

Enklast är att kasta in getchar(); mellan dina frågor. Då rensas input-bufferten från tangentbordet som innehåller NULL från din första fråga, vilket i sin tur gör att inläsningen avbryts iom att funktionen scanf läser att inmatningen är klar (fast den inte är det).

Permalänk: https://www.webforum.nu/p/1425391

## #7 — Marcus E, 2004-09-01T13:08Z

Eller helt enkelt ersätta scanf med
int ch = getchar();

Permalänk: https://www.webforum.nu/p/1425397

## #8 — Phorpher, 2004-09-01T13:15Z

Eller:

```
fflush(stdin);
```

Permalänk: https://www.webforum.nu/p/1425399

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/110468-varför-blir-det-fel
