Avatar billede javanic Nybegynder
12. april 2004 - 10:54 Der er 8 kommentarer og
1 løsning

getline driller (springer linie over)

Hep !

Hvordan får jeg fat i en hel sætning vha. getline i forbindelse med med min while og switch. Pt. springer den en linie over, så jeg ikke får mulighed for at taste kordinater og værdi ind:

Output lige pt. (output er kun til test i øjeblikket):
---------------
Enter co-ordinates and value:
(syntax: x, y, value)
Output:

Menu:
----------
1  -> Insert color.
2  -> Reset color.
3  -> Print Table.
4  -> Fill table (Automatic).
99 -> Exit.
----------
Please enter option number:


...og den del af koden der driller ser således ud:


while(true)
{
    getMenu();
    cin >>  in;
    int parsed_in = atoi(in.c_str());

    switch(parsed_in)
    {
   
        case 1:
        system("cls");
        cout    << "Angiv kordinater og vaerdi: \n";
            << "(syntax: x-kordinat, y-kordinat, vaerdi)" << endl;
        getline(cin, input, '\n');
        cout << "Output: " << input << endl;
        ...etc.."


Humlen i det er, at brugeren skal indtaste et kordinatsæt og en værdi, som jeg derefter kan hente de forskellige tokens ud fra.
Avatar billede arne_v Ekspert
12. april 2004 - 10:58 #1
Gæt:

Det at du bruger både:

cin >>

og

getline(cin,

giver problemer.

Prøv med enten kun den ene eller kun den anden.
Avatar billede javanic Nybegynder
12. april 2004 - 11:10 #2
Hehe,...du er fandme skarp - det var jo det der var problemet ;o)
Er der en bestemt årsag til at man ikke kan blande de to ?

...og ligger du lige et svar.
Avatar billede javanic Nybegynder
12. april 2004 - 11:28 #3
Lige et hurtigt tillægs-spørgsmål nu du er så varm ;o)

...SKAL man bruge char i forbindelse med strtok(), eller kan man også bruge string?
Avatar billede arne_v Ekspert
12. april 2004 - 11:39 #4
1)  >> operatoren bruger sin interne buffer og det giver notorisk problemer
    at balnde den med andre funktioner fordi det er usikkert hvad der allerede
    er læst ind i den buffer.

2)  svar

3)  strtok forventer char arrays (C strenge).
Avatar billede javanic Nybegynder
12. april 2004 - 11:44 #5
thanks...
Avatar billede narrr Nybegynder
12. april 2004 - 16:04 #6
...og hvis du gerne vil bruge både cin og getline, så skal du bare flushe bufferen..

Det kan gøres med
C:
fflush(stdin);

C++:
cin.sync();
Avatar billede arne_v Ekspert
12. april 2004 - 16:25 #7
Hvilken compiler accepterer cin.sync() ?

[mine er ikke så samarbejds villige !]
Avatar billede narrr Nybegynder
12. april 2004 - 16:57 #8
Min VC++ 7.0 accepterer:
---
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string str;
    cin>>str;
    cin.sync();
    getline(cin,str);
}
---
Avatar billede arne_v Ekspert
12. april 2004 - 17:11 #9
Den er god nok også i mine compilere - jeg kan bare ikke stave (synch med h).

Sorry.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester