Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2014, 15:31   #1
artem7902
Новичок
Джуниор
 
Регистрация: 19.10.2014
Сообщений: 3
По умолчанию Ввод массива в виде элементов

Здравствуйте, прошу помочь с вводом массива через консоль в виде символов с помощью gets(). Никак не могу понять почему не работает. Заранее спасибо за помощь.
Код:
#include <QCoreApplication>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <cstdio>
using namespace std;
void vvodprot();
void vvodosnowa(char str[],int arr[],int &size);
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    vvodprot();
    return a.exec();
}
void vvodprot()
{
int size=0;
int arr[size];
char str[80];
cout << "Введiть елементи масиву через пробiл\n";
gets(str);
vvodosnowa(str,arr,size);
}
void vvodosnowa(char str[],int arr[],int &size)
{
int i=0; size=0;
forever
{
while(str[i]!='\0' && str[i]!=' ')i++;
if (str[i]=='\0')return;
arr[size]=0;
while(str[i]!='\0' && str[i]!=' '){
 if (str[i]!=isdigit(str[i])){
     cout << str[i] << " Не цифра! \n";
     return;
 }}
arr[size] = arr[size]*10+(str[i]-48);i++;
cout << arr [size] << "\n";
size++;}}

Последний раз редактировалось Stilet; 19.10.2014 в 18:07.
artem7902 вне форума Ответить с цитированием
Старый 19.10.2014, 16:09   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Код:
void vvodprot() 
{ 
int size=0; 
int arr[size];
Здесь ошибка. Массив нулевой длинны
8Observer8 вне форума Ответить с цитированием
Старый 19.10.2014, 17:19   #3
artem7902
Новичок
Джуниор
 
Регистрация: 19.10.2014
Сообщений: 3
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Код:
void vvodprot() 
{ 
int size=0; 
int arr[size];
Здесь ошибка. Массив нулевой длинны
Спасибо исправил, но все равно после ввода через пробел чисел программа ничего не показывает.
artem7902 вне форума Ответить с цитированием
Старый 20.10.2014, 12:43   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Неохота в вашей программе разбираться. Это значит, что надо будет её до конца продумать

Расскажу как бы я поступил. Я бы вместо статического массива использовал бы vector, а вместо С-строк - С++-строки

Уберите эту строку:
Код:
#include <QCoreApplication>
И соответсвенно эти:
Код:
QCoreApplication a(argc, argv);
Код:
return a.exec();
Можно и без них обойтись.

Последний раз редактировалось 8Observer8; 20.10.2014 в 12:58.
8Observer8 вне форума Ответить с цитированием
Старый 20.10.2014, 12:53   #5
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Вставьте этот код и убедитесь, что он работает:
Код:
#include <iostream>

int main()
{
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
Вместо C-строк всегда используйте C++-строки:
Код:
#include <iostream>
#include <string>

int main()
{
    std::string str = "Hello, world!";
    std::cout << str << std::endl;
    return 0;
}
Вместо статичекого массива "int arr[size];" используйте динамический массив std::vector

Код:
#include <iostream>
#include <vector>

int main()
{
    // Fill array
    std::vector<int> arr;
    arr.push_back( 3434 );
    arr.push_back( 645 );
    arr.push_back( 6767 );
    arr.push_back( 21564 );
    arr.push_back( 4455 );

    // Show array
    for ( std::size_t i = 0 ; i < arr.size(); ++i ) {
        std::cout << arr[i] << std::endl;
    }

    return 0;
}
В vector'е можно хранить строки (да и объекты других типы):
Код:
#include <iostream>
#include <string>
#include <vector>

int main()
{
    // Fill array
    std::vector<std::string> arr;
    arr.push_back( "I" );
    arr.push_back( "love" );
    arr.push_back( "computers" );
    arr.push_back( "and" );
    arr.push_back( "programming!" );

    // Show array
    for ( std::size_t i = 0 ; i < arr.size(); ++i ) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}
8Observer8 вне форума Ответить с цитированием
Старый 20.10.2014, 15:23   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Вот так можно ввести массив целых чисел:
Цитата:
Enter a number (q=quit):
> 3434
> 4532
> 454
> 56
> 7
> 65656
> 7
> 8787
> q

Array: 3434 4532 454 56 7 65656 7 8787

Press <RETURN> to close this window...
main.cpp
Код:
#include <iostream>
#include <string>
#include <vector>

std::vector<int> getArrya();
void showArray( const std::vector<int> &arr );

int main()
{
    // Fill array
    std::vector<int> arr;
    arr = getArrya();

    // Do something with array
    // ...

    // Show array
    std::cout << "\nArray: ";
    showArray( arr );
    std::cout << std::endl;

    return 0;
}

std::vector<int> getArrya()
{
    std::vector<int> arr;

    std::cout << "Enter a number (q=quit):\n";
    std::string str;
    while( true ) {
        std::cout << "> ";
        if ( !std::getline( std::cin, str ) || str == "q" ) {
            break;
        }

        int value = std::stoi( str );
        arr.push_back( value );
    }

    return arr;
}

void showArray( const std::vector<int> &arr )
{
    for ( std::size_t i = 0 ; i < arr.size(); ++i ) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
}
8Observer8 вне форума Ответить с цитированием
Старый 20.10.2014, 16:37   #7
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Жесть ... разбираться в коде значит лень ... а писать столько текста не лень .. Где логика то??

Вот правильные функции:
Код:
void vvodprot()
{
const int size=10;
int arr[size];
char str[80];
//cout << "Введiть елементи масиву через пробiл\n";
cout << "Ennter array elemnts\n";
gets(str);

int arr_len = sizeof ( arr ) / sizeof ( *arr );
vvodosnowa(str,arr,arr_len);
}


void vvodosnowa(char str[],int arr[],int &size)
{
int i=0; size=0;
while(1)
{
    while(str[i]!='\0' && str[i]!=' ')i++;
    if (str[i]=='\0')return;
    arr[size]=0;
    while(str[i]!='\0' && str[i]!=' '){
     if (str[i]!=isdigit(str[i])){
         cout << str[i] << " Not number! \n";
         return;
     }}
    arr[size] = arr[size]*10+(str[i]-48);i++;
    cout << arr [size] << "\n";
    size++;
}
}
Правда вывод почему то смущает. Наверное во второй функции где то ошибка.
Изображения
Тип файла: jpg Безымянный.jpg (14.8 Кб, 116 просмотров)
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.

Последний раз редактировалось WorldMaster; 20.10.2014 в 16:39.
WorldMaster вне форума Ответить с цитированием
Старый 20.10.2014, 22:48   #8
artem7902
Новичок
Джуниор
 
Регистрация: 19.10.2014
Сообщений: 3
По умолчанию

Да та же проблема, вроде 100 раз уже все проверил, а все равно выводит бред. Ладно буду с преподами разбираться тогда, понапишут методичек с не работающими кодами и ломай себе голову. Спасибо за ответы.
artem7902 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа, которая б находила средние значение модулей элементов одномерного массива. в виде процедур jOos Паскаль, Turbo Pascal, PascalABC.NET 0 08.10.2013 21:28
Переорганизовать ввод элементов массива с учетом задания. Настяyu Помощь студентам 0 26.12.2011 20:29
Ввод элементов массива! d00ker Помощь студентам 2 24.10.2010 13:53
Ввод элементов массива Х с помощью цикла for: veter_s_morya Паскаль, Turbo Pascal, PascalABC.NET 4 13.05.2008 18:19