webForumDet fria alternativet

cin problem

C/C++

3 svar · 148 visningar · startad av erik_r

Medlem sedan maj 200083 inlägg
Frågan#1

Hej jag är nybörjare på C++ och har ett problem som borde vara ganska lätt att lösa.
Ta det här programmet som ex:

#include <iostream.h>

int main()
{
	char svar[10];
	int tal;
	
	cout << "Skriv ett tal: ";
	cin >> tal;
	
	cout << "Skriv ett ord: ";
	cin.getline(svar,9);
	
	cout << "Du skrev " << tal << " och " << svar << endl;
	return 0;
}

När de körs frågar det efter en siffra, varefter det ska fråga efter ett ord (jag vill inte använda cin >> svar eftersom det ska kunna vara mellanrum i ordet) men det gör programet aldrig. Det hoppa till sista raden och avslutas.
Kommenterar jag bort raden "cin >> tal;" fungerar det, varför?

Medlem sedan mars 20007 896 inlägg
#2

Försök med:

...
cin >> tal;
cin.get ();
...
Medlem sedan maj 200083 inlägg
#3

Pefekt. det fungerar. Tack för hjälpen.

Medlem sedan juni 200010 432 inlägg
#4

Kommenterar jag bort raden "cin >> tal;" fungerar det, varför?

Därför att det du egentligen gör är att läsa en ström av tecken. I tangentbordsbufferten ligger dock vagnretur kvar och skräpar varvid det även blir första tecken vid nästa läsning genom strömmen och alla tecken efter det hoppas över. Det finns olika sätt att hantera detta... ett av dem har SPiN redan skrivit ett annat är att använda flush()... det beror på "när var hur". Skriver man en snutt som ska upp i ett konsolförnster duger cin.get() är det en större applikation har man förmodligen en egen metod som läser strömmar och där kanske inte samma behov uppstår.

382 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
124 ms — hämta statistik (db)
129 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)