Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

ograniczyć długość wpisywanego tekstu;wpisywanie liczby do char

Ostatnio zmodyfikowano 2014-04-03 22:47
Autor Wiadomość
thai1
Temat założony przez niniejszego użytkownika
ograniczyć długość wpisywanego tekstu;wpisywanie liczby do char
» 2014-03-29 19:45:59
Witam.
 Jak ograniczyć/kontrolować długość wpisywanego tekstu do tablicy, stworzonej operatorem new?
mając - char*wtab=new char[50];
Jak zabezpieczyć tablice char stworzoną operatorem new przed wpisaniem innego typu danych?
Jestem początkującym i próbuje zrobić swój programik liczący. Zatrzymałem się na etapie zbierania danych od użytkownika. Oto kod, może i nie potrzebny:

plik.h:
C/C++
#include <iostream>
#include<cstdlib>
#include <conio.h>
#include <string>

using namespace std;

void information();
void clrscr();

//plik main:
C/C++
#include "naglowek.h";

int liczba_produktow, liczba_surowcow, number;

int main()
{
    MENU:
    cout << "\t---------MENU-----------\n\n";
    cout << "1 - Start program\n";
    cout << "0 - Turn off\n\n";
    cout << "Put your choice___";
    cin >> number;
   
    switch( number )
    {
    case 1:
        clrscr();
        information();
        break;
       
    case 0:
        break;
       
    default:
        cout << "\n";
        cout << "wrong answer, press ENTER and choice again...\n";
        getchar();
        getchar();
        clrscr();
        goto MENU;
    }
   
   
    cout << endl;
    system( "pause" );
}

//funkcje:

C/C++
int components, products, price;



void clrscr()
{
   
    system( "cls" );
   
}

//************************************************

void information()
{
    ONE:
    cout << "bin number of components___";
    cin >> components;
    TWO:
    cout << "\n";
    cout << "bin number of products___";
    cin >> products;
    cout << "\n";
    THREE:
    char ** wtabcomp = new char *[ components ];
    char ** wtabprod = new char *[ products ];
    //******************************************************
    FIVE:
    for( int i = 0, j = 1; i < components; i++, j++ )
    {
        wtabcomp[ i ] = new char[ 50 ]; // W jaki sposób kontrolować długość wpisywanego tekstu w czasie pracy programu?
        cout << "write name of component " << j << "___"; // dlaczego po wpisaniu do tablicy char, liczby int, program nie protestuje?
        cin >> wtabcomp[ i ]; // W jaki sposób poprawic wpisane dane?
       
    }
   
    //*******************************************************
    SIX:
    for( int i = 0, j = 1; i < products; i++, j++ )
    {
        wtabprod[ i ] = new char[ 50 ];
        cout << "write name of product " << j << "___";
        cin >> wtabprod[ i ];
    }
    SEVEN:
    for( int i = 0; i < products; i++ )
    {
        int * wprice = new int[ products ];
        cout << "bin product price " << wtabprod[ i ] << ", please__";
        cin >> wprice[ i ];
       
    }
    EIGHT:
    int * wassecc = new int[ components ];
    for( int i = 0; i < components; i++ )
    {
        cout << "bin, how many of copmonent are asseccible " << wtabprod[ i ];
        cin >> wassecc[ i ];
    }
   
   
   
   
}
P-107434
alixir
» 2014-03-29 20:23:18
Jeśli chcesz tylko ograniczyć długość wpisywanego tekstu to najlepiej test to zrobić przy użyciu scanf.

C/C++
char tab[ 50 ];
scanf( "%49s", tab );
P-107441
thai1
Temat założony przez niniejszego użytkownika
» 2014-03-30 15:04:31
Nie pomaga :P
P-107479
pekfos
» 2014-03-30 15:24:47
Bo to określa, ile danych chcesz wczytać, a nie ile będzie można wpisać.
P-107480
thai1
Temat założony przez niniejszego użytkownika
» 2014-04-03 12:08:32
ok wczyta mi część liter, natomiast jak zrobić żeby zablokować następnie wpisywane litery, bo  automatycznie przechodzą one na następne wskaźniki
P-107642
alixir
» 2014-04-03 17:56:16
Nie wiem czy w konsoli da się zablokować możliwość pojawiania się kolejnych znaków, ale możesz je pominąć.

C/C++
char tab[ 10 ];
scanf( "%9s%*[^\n]s", tab );

Ten kod wczyta maksymalnie 9 znaków, a pozostałe (łącznie ze spacjami) aż do znaku nowej linii pominie, więc bufor będziesz miał czysty.
P-107653
thai1
Temat założony przez niniejszego użytkownika
» 2014-04-03 22:47:49
dzięki za odpowiedzi :)
P-107671
« 1 »
  Strona 1 z 1