webForumDet fria alternativet

Strul med inmatning via cin?

C/C++

5 svar · 268 visningar · startad av Mattias

Medlem sedan mars 2000205 inlägg
Frågan#1

Jag har ett konstigt problem när jag tar in två inmatningar i rad från användaren via cout/cin-satser. När man fått förfrågan och skrivit in första inmatningen så fortsätter programmet _förbi_ nästkommande cout/cin-sats utan att man ges nån möjlighet att skriva in det andra värdet. Så här ser koden ut:

string sinput, wanted_dir;
char input2[256];
...
cout << "Ange regissör: ";
cin >> sinput;
wanted_dir = sinput;
	
cout << "Ange år: ";
cin >> input2;
wanted_year = atoi(input2);
...

Programmet forsätter alltså förbi "Ange år"-frågan utan att man får chans att skriva in något. Vad kan detta bero på?

Tacksam för svar!

Medlem sedan nov. 20022 355 inlägg
#2

Jag har ingen 100% koll på ditt problem men jag tror det har något med att "enter tryckningen" inte fångas upp utan läggs i dina andra inmatningar! prova att deklarera en char (char c)
och fånga upp enter med: cin.get(c); efter dina cin>> ...

r/ Hos mig fungerade din kod finfint!

Medlem sedan mars 2000205 inlägg
#3

Ja, har också hört att man kan använda flush() för att rensa nån buffert, men kompilatorn klarade inte "flush(cin)" och det hjälper inte att köra "flush(cout)". Programmet fortsätter alltså ändå förbi fråga 2. Jag har alltså lagt flusharna precis innan fråga 2 i koden.

Angående cin.get(c) så hade det blivit smidigare att direkt plocka in användarinmatningen till string istället för att gå omväg om char[]. Eller förresten, hur smidigt är det att konvertera en char[]-string till en "vanlig" string? Finns det nån funktion som plockar över tecknena i char[]-stringen till en string?

Medlem sedan nov. 20022 355 inlägg
#4

Det jg menade var att du fångar upp din variabel i en string som du redan gör men där efter så plockar du upp return tecknet med en char (cin.get(x);) Så har jag löst det i vissa fall..

Medlem sedan mars 2000205 inlägg
#5

Nej, det funkar inte. När jag skriver nedanstående kod så plockar programmet endast förnamnet av den regissör jag skriver in och fortsätter förbi fråga 2.:

char tempreturn;
...
cout << "Ange en regissör: ";
cin >> sinput;
cin.get(tempreturn); 
wanted_dir = sinput;
cout << wanted_dir << endl; //här skrivs bara förnamnet ut till skärmen
cout << "Ange ett år: ";
cin >> input2;
wanted_year = atoi(input2);
...
Medlem sedan mars 2000205 inlägg
#6

Jag löste problemet genom att skriva så här vid inplockning av tecken:

while (cin.get() != '\n');
cin.getline(input, 256);
261 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)