Форум программистов, компьютерный форум CyberForum.ru

Чтение длинных целых - C++

Восстановить пароль Регистрация
 
Mysterious Light
3581 / 1677 / 218
Регистрация: 19.07.2009
Сообщений: 2,535
Записей в блоге: 16
01.08.2009, 21:31     Чтение длинных целых #1
Помогите, пожалуйста, правильно организовать ввод длинных целых как строк.
При коде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "stdafx.h"
#include <iostream>
#define I(x) char*x=new char;
//#define L(s,r) for(r=0;s[r]!='\0';++r);
 
int main()
{
    I(x); I(y); I(z);
    //char a,b,c,*u,d;
    scanf("%s %s %s",x,y,z); //это место ввода
    printf("x=%s\ny=1%s\nz=%s.",x,y,z);
    system("PAUSE");
    return 0;
}
и входных данных
Код
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 33333333333333333333333333333333333333333333333333333333333333333333333333
программа ведет себя некорректно:
• первое число имеет вид "111...1122...2233...333", второе — "222...2233...333", третья читает, как надо.
• пропускает строку system("PAUSE");

На более мелких тестах работает правильно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2009, 21:31     Чтение длинных целых
Посмотрите здесь:

Вывод длинных целых чисел на консоль - проблема? C++
Умножение длинных целых 11-ричных чисел в виде строк C++
C++ Помогите пожалуйста по Одномерному массиву длинных целых чисел!!!
C++ Задан файл из целых чисел со знаком, разделенных пробелом. Произвести чтение этих чисел в обратном порядке, не читая предыдущие.
C++ Перевод длинных целых чисел из двоичной в десятичную
C++ Класс длинных чисел
C++ Помогите отладить программу: Разработать класс, содержащий вектор длинных целых чисел
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
01.08.2009, 21:49     Чтение длинных целых #2
ээээ
C++
1
#define I(x) char*x=new char;
выделяет 1 байт под строку!!!
а надо
C++
1
char * x = new char [STRING_SIZE];
mirso
524 / 342 / 17
Регистрация: 05.04.2009
Сообщений: 709
01.08.2009, 22:29     Чтение длинных целых #3
Mysterious Light,
Цитата Сообщение от Mysterious Light Посмотреть сообщение
правильно организовать ввод длинных целых как строк
Если вопрос не в динамической памяти, тогда так ->
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//----------------------------------------------------------------
#include <iostream>
#include <windows.h> 
 
int main()
{
char s[3][1024];
        
    scanf("%s %s %s", &s[0], &s[1], &s[2]); //это место ввода
    
    //-----------------------------------------------------------    
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 9);
    printf(" x = %d;\n y = %d;\n z = %d;\n", 
             strlen(s[0]), strlen(s[1]), strlen(s[2])); 
    
    //-----------------------------------------------------------    
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);
    printf(" x = %s;\n y = %s;\n z = %s;\n", s[0], s[1], s[2]);         
    
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11);    
system("pause"); 
return 0;
}
//----------------------------------------------------------------
Mysterious Light
3581 / 1677 / 218
Регистрация: 19.07.2009
Сообщений: 2,535
Записей в блоге: 16
02.08.2009, 20:53  [ТС]     Чтение длинных целых #4
Добавил после char[100] и стало работать нормально. Тем не менее меня до сих пор смущает то, что при небольших входных числах приведенный мною код (тот, что выделяет под строку 1 байт) работает.
mirso, я твой код не смотрел, потому что он подключает запретный модуль windows.h
<Norton>
Отдыхающий:)
 Аватар для <Norton>
94 / 91 / 10
Регистрация: 05.04.2009
Сообщений: 188
02.08.2009, 21:02     Чтение длинных целых #5
mirso, немного подправил ваш код, чтобы без "windows.h" работал.
Код не проверял!(но должен работать)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include "stdafx.h"
 
int main()
{
char s[3][1024];
        
        scanf("%s %s %s", &s[0], &s[1], &s[2]); //это место ввода
        
        //-----------------------------------------------------------    
        printf(" x = %d;\n y = %d;\n z = %d;\n", 
                 strlen(s[0]), strlen(s[1]), strlen(s[2]));     
        
    //-----------------------------------------------------------    
        printf(" x = %s;\n y = %s;\n z = %s;\n", s[0], s[1], s[2]);             
           
system("PAUSE");
return 0;
}
Насчёт вашего вопроса, Mysterious Light:
Переменные выходят за предлы соего участка памяти, тем самым затирая другие ячейки.
Чем больше переменных, тем больше вероятность затирания.
Mysterious Light
3581 / 1677 / 218
Регистрация: 19.07.2009
Сообщений: 2,535
Записей в блоге: 16
02.08.2009, 21:05  [ТС]     Чтение длинных целых #6
Спасибо, теперь полностью понятно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2009, 21:06     Чтение длинных целых
Еще ссылки по теме:

Класс "Массив длинных целых чисел" C++
Создать класс длинных целых чисел C++
C++ Умножение/деление длинных целых чисел из строк
C++ Построчное чтение целых чисел из текстового файла с занесением в массив для анализа
C++ Умножение длинных чисел

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
02.08.2009, 21:06     Чтение длинных целых #7
приведенный мною код (тот, что выделяет под строку 1 байт) работает
Но пишет-то куда попало !
Чтобы уронить программу нужно писать куда попало несколько больше чем 1 байт.
Ну или сразу так:
C++
1
2
char *p= NULL;
*p= '\0;
Yandex
Объявления
02.08.2009, 21:06     Чтение длинных целых
Ответ Создать тему
Опции темы

Текущее время: 00:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru