Permalänk
Medlem

Hjälp med c++ programmering!

Hej!
Har börjat programmering B efter jul, vilket innebär c++.
Ska göra ett program med strings, men jag gör något fel. Programmet ska skriva ut 6 stycken meningar, varav varje börjar med en siffra (0-5), sen frågar programmet efter vad man vill göra, man skriver in ett nummer 0-5, där 0 ska avsluta programmet, och 1-5 ska behandla texter med strings. Problemet är att programmet inte låter mig skriva in en text till variablen str1 vid getline(cin, str1), utan texten "tryck valfri knapp för att avsluta" kommer.

Min nuvarande kodning ser ut:

#include <iostream> #include <string> using namespace std; int main(void){ int i, x, t; char tkn; string str1 = "", str2 = "", str3 = ""; cout << "Textbehandlare" << endl; cout << "1: Skriv in text (i en sträng)" << endl; cout << "2: Visa text" << endl; cout << "3: Infoga text" << endl; cout << "4: Ta bort text" << endl; cout << "5: Radera all text" << endl; cout << "0: Avsluta" << endl; cout << endl << endl; cout << "Vad vill du göra?: "; cin >> i; if ( i == 1 ) { cout << "1. Vad ska skrivas in? "; getline(cin, str1); cout << str1 << endl; } if ( i == 2 ) { cout << "2. Du har skrivit in: " << str1 << endl << "Vad vill du göra?: " << endl; cin >> i; } if (i == 3 ) { cout << "3. Vad ska infogas?: "; cin >> str3; cout << endl << "3. I vilken startposition?: "; cin >> x; str1.insert(x, str3); cout << str1; cout << "Vad vill du göra?: "; cin >> i; } system("pause"); return 0; }

Visa signatur

ASUS ROG STRIX Z270H GAMING, i7 7700K, MSI GTX 1080 Ti 11 GB Gaming, Corsair HX 850W, Corsair 16GB, Samsung 850 500 GB, Samsung 830 256GB, WD Black 1TB, BenQ XL2420T

Permalänk
Medlem

hmm, testa köra cin.flush(); innan getline

Permalänk
Medlem
Skrivet av RaBoX:

hmm, testa köra cin.flush(); innan getline

Programmet säger att ett sådant kommando finns inte i iostream.
Har provat med cin.clear() utan framgång.

Visa signatur

ASUS ROG STRIX Z270H GAMING, i7 7700K, MSI GTX 1080 Ti 11 GB Gaming, Corsair HX 850W, Corsair 16GB, Samsung 850 500 GB, Samsung 830 256GB, WD Black 1TB, BenQ XL2420T

Permalänk
Medlem

char szBuff[128]; cin.getline(szBuff, 128);

Borde funka.

Permalänk

pröva att köra cin.ignore(100, '\n') efter första cin >> i .

Visa signatur

AMD Phenom II X4 955 BE 3,2 Ghz | XFX HD 6970 | Corsair 4GB DDR3 1333 Mhz | Corsair VX 550W | Crucial RealSSD 64 GB | Samsung Spinpoint F3 500 GB | Antec 902

Permalänk
Medlem

okej sry, cin.clear heter den ju.
nehe... testa:

cin.ignore(1000, '\n');
cout << "1. Vad ska skrivas in? ";
getline(cin, str1);
cout << str1 << endl;

Permalänk

cin.get(); funkar annars prima, åtminstone i min miljö, det vi fick lära oss på universitet.

Permalänk
Medlem

Tackar för alla svar!
Lyckades lösa problemet med cin.ignore, hoppas att det går bra att jag "bumpar" tråden med nya eventuella problem.

Visa signatur

ASUS ROG STRIX Z270H GAMING, i7 7700K, MSI GTX 1080 Ti 11 GB Gaming, Corsair HX 850W, Corsair 16GB, Samsung 850 500 GB, Samsung 830 256GB, WD Black 1TB, BenQ XL2420T

Permalänk

Problemet är att cin >> operatorn och getline funkar inte så bra ihop. Använd den ena eller den andra. Och sen ett litet tips är att kolla returvärdet på (cin >> i)

Permalänk
Medlem
Skrivet av nastorian:

Problemet är att cin >> operatorn och getline funkar inte så bra ihop. Använd den ena eller den andra. Och sen ett litet tips är att kolla returvärdet på (cin >> i)

Aha!
Problemet var att jag vill att strängen ska kunna innehålla mellanslag, läraren nämnde att man var tvungen att använda getline för att det skulle funka.

Visa signatur

ASUS ROG STRIX Z270H GAMING, i7 7700K, MSI GTX 1080 Ti 11 GB Gaming, Corsair HX 850W, Corsair 16GB, Samsung 850 500 GB, Samsung 830 256GB, WD Black 1TB, BenQ XL2420T

Permalänk
Skrivet av nastorian:

Problemet är att cin >> operatorn och getline funkar inte så bra ihop. Använd den ena eller den andra. Och sen ett litet tips är att kolla returvärdet på (cin >> i)

Cin >> går att använda tillsammans med getline(). Det gäller bara att tömma inbufferten med cin.ignore(1000, '\n') efter varje inläsning med cin >> om nästa inläsning sker med getline().

Cin >> lämnar kvar det tecken som avslutar inläsning (mellanslag eller enter i TS fall) i inbufferten, så när nästa inläsning med getline() görs så ser den "enter" direkt och avslutar inläsningen, om bufferten inte tömts som sagt

Visa signatur

AMD Phenom II X4 955 BE 3,2 Ghz | XFX HD 6970 | Corsair 4GB DDR3 1333 Mhz | Corsair VX 550W | Crucial RealSSD 64 GB | Samsung Spinpoint F3 500 GB | Antec 902

Permalänk

cin.ignore(1000, '\n'); tycker det är en dålig lösning. sitter och tittar i headern men fan hittar inget bättre hehe
cin.get() funkar också

Permalänk

Jag vet inte vad ni tycker, men enligt mig så är C++'s strömmar och strömoperatorer rätt så misslyckade konstruktioner.

Om jag måste göra I/O i C++ så skulle jag antagligen använda C-funktioner (fopen, fprintf, fscanf, ...), men innan dess skulle jag fundera om det fanns något annat språk som var mera lämpligt. Är det mycket I/O så är antagligen inte rå prestanda den främsta prioriteten, och då verkar det overkill att använda C++.

Nu handlade det väl förvisso om en kurs i just C++ och då har man väl inget val direkt, och man kanske inte får använda C-funktionerna heller.

Här finns en kort jämförelse av hur man gör I/O i olika språk: http://en.wikipedia.org/wiki/Comparison_of_programming_langua...

Permalänk
Medlem
Skrivet av VirtualIntent:

Jag vet inte vad ni tycker, men enligt mig så är C++'s strömmar och strömoperatorer rätt så misslyckade konstruktioner.

Om jag måste göra I/O i C++ så skulle jag antagligen använda C-funktioner (fopen, fprintf, fscanf, ...), men innan dess skulle jag fundera om det fanns något annat språk som var mera lämpligt. Är det mycket I/O så är antagligen inte rå prestanda den främsta prioriteten, och då verkar det overkill att använda C++.

Nu handlade det väl förvisso om en kurs i just C++ och då har man väl inget val direkt, och man kanske inte får använda C-funktionerna heller.

Här finns en kort jämförelse av hur man gör I/O i olika språk: http://en.wikipedia.org/wiki/Comparison_of_programming_langua...

Håller med dig 100%