[C++] Paskudne znaczki ASCII...

0

Hello!!! Dlaczego po skompilowaniu (na platformie dosowej turbo c++), po wprowadzeniu imienia i nazwiska wyskakują mi jakieś znaczki paskudne z kodu ASCII zamiast
Imie: 'costam'
Nazwisko: 'costam'

A oto kod:

 
  #include <iostream.h>
  #include <conio.h>
  #include <stdio.h>

  main()
  {
   int i, y;
   char imie[14], nazwisko[10];

    clrscr();

    gotoxy(30,20);  // ustawienie rozpoczete
    putchar(201);
    for(i=0; i<20; i++)
    {
     putchar(205);
    }
    putchar(187);

    gotoxy(30, 21);
    y=21;
    for(i=0; i<5; i++)
    {
     printf("%c                    %c", 186, 186);
     y++;
     gotoxy(30, y);
    }
    gotoxy(30, 26);
    putchar(200);
    for(i=0; i<20; i++)
    {
     putchar(205);
    }
    putchar(188);



    gotoxy(32, 22);
    cout << "Imie: ";

    gotoxy(38, 22); textbackground(5); cprintf("            ");


    gotoxy(32, 24);
    cout << "Nazwisko: ";
    gotoxy(42, 24); textbackground(5); cprintf("        ");
    gotoxy(38, 22);

    // ****************** koniec czesci graficznej **********************


     // oto czesc funkcyjna programu ************
    {
     int i, x, a;
     char n, s, key;
    
     x=38;
     for(i=0; i<12; i++)
     {
      n=getch(); cout << n; imie[i]=n;
      x++;

      if(n==8)
      { imie[i]=NULL;  cout << " \b";     }
      else
      if(n==13)
       break;
      }
      x-=1;
      gotoxy(x,22);



    x=42;
    gotoxy(x,24);

     for(a=0; a<8; a++)
     {
      s=getch(); cout << s; nazwisko[a]=s;
      x++;
      if(n==8)
      { imie[i]=NULL;  cout << " \b";     }
      else
      if(s==13)
       break;
     }
     x-=1;
     gotoxy(x, 24);

    }


    gotoxy(1,1);  cout << "Imie: " << imie;
    gotoxy(1,2);  cout << "Nazwisko: " << nazwisko;

  getch();
  }
0

O co chodzi z x-=1??
nigdy nie widziałem czegoś takiego
jeśli chciałeś zmniejszyć ilość o 1 to czemu nie
--x lub x--

Pozdro

0

Skopiowałem to do kompilatora i stringi z imieniem i nazwiskiem są wyświetlane bezproblemowo. Inną rzecza jest to że strasznie namieszałeś w tym kodzie. Całe te pentle z wczytywaniem getch mozna było zastąpić poprzez jedną linijke

cin>>tablica_znakowa //dla ciagu bez spacji
cin.get(char * tablica_znakowa,int wielkosc) //dla ciagu ze spacją

Przewaga nad getch jest taka ze user moze używać backspace'a.

0

czy chodzi ci czasem o brak polskich znakow ??

0

cin.get(char * tablica_znakowa,int wielkosc)

Przewaga nad getch jest taka ze user moze używać backspace'a.

czyli w cin.get() klawisz backspace nie dziala i trzeba go samemu ustawić??
Mr P czy mógłbyś mi podać przyklad na ta funkcje cin.get() - co tam do srodka sie wpissuje ??

THX z gory..

0

klawisz backspace nie działa dla TWOICH pętli z funkcją getch() bo to wynika ze specyfiki tego algorytmu, pętla czeka przy każdym obrocie na naciśnięcie klawisza i wypisuje go na ekran po czym ten wypisany znak "umiera"(tak na marginesie to zamiast pisac znak=getch(); cout<<znak; wystarczyło napisać znak=getche(); - automatycznie wypisuje).

{
char imie_i_nazwisko[20];
cout<<"Wpisz imie i nazwisko";
cin>>imie_i_nazwisko; //jezeli wpiszesz "Franek Nowak" to do łańcucha zapisze sie tylko "Franek"
cin.get(imie_i_nazwisko,20); //tutaj zmienna ma zawartość "Franek Nowak"
}

cin.get() moze też mieć trzeci parametr który mówi o znaku kończącym wpisywanie, domyślnie ustawionym na '\n' czyli nie konieczne jest jego wpisywanie jezeli chcesz zeby to był enter.

PS uważaj na złożenia jednej i drugiej metody, jezeli odczytujesz łańcuch za pomocą cin>> i wpiszesz do niego ciąg ze spacjami ("raz dwa trzy") do zmiennej zapisze się tylko "raz" ale w buforze strumienia zostaną słowa pozostałe. Przy dalszych poleceniach odczytu program nie zatrzyma sie na twój wpis tylko weźmie sobie tą pozostałość bufora. Jak to ominąć to juz to komus pisałem tutaj wiec nie bede sie powtarzał.

1 użytkowników online, w tym zalogowanych: 0, gości: 1