Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Эксперт по математике/физике
4136 / 2041 / 420
Регистрация: 19.07.2009
Сообщений: 3,094
Записей в блоге: 23
1

Чтение длинных целых

01.08.2009, 21:31. Просмотров 605. Ответов 6
Метки нет (Все метки)

Помогите, пожалуйста, правильно организовать ввод длинных целых как строк.
При коде
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");

На более мелких тестах работает правильно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2009, 21:31
Ответы с готовыми решениями:

Создать класс длинных целых чисел
Создать класс длинных целых чисел. Класс имеет конструктор по умолчанию, конструктор -...

Найти произведение двух длинных целых чисел
Здравствуйте. Я плохо знаю русский. Извините за этого. Я еще новичок в C++ программирование. В...

Умножение/деление длинных целых чисел из строк
у кого есть код 'умножение и деление целых чисел из строк'? заранее спасибо Добавлено через 32...

Вывод длинных целых чисел на консоль - проблема?
Здравствуйте! Имею следующий вопрос. Есть задача - вывести на консоль степени двойки от 1 до 64....

6
123 / 121 / 0
Регистрация: 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];
1
535 / 351 / 47
Регистрация: 05.04.2009
Сообщений: 724
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;
}
//----------------------------------------------------------------
0
Эксперт по математике/физике
4136 / 2041 / 420
Регистрация: 19.07.2009
Сообщений: 3,094
Записей в блоге: 23
02.08.2009, 20:53  [ТС] 4
Добавил после char[100] и стало работать нормально. Тем не менее меня до сих пор смущает то, что при небольших входных числах приведенный мною код (тот, что выделяет под строку 1 байт) работает.
mirso, я твой код не смотрел, потому что он подключает запретный модуль windows.h
0
Отдыхающий:)
94 / 91 / 22
Регистрация: 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:
Переменные выходят за предлы соего участка памяти, тем самым затирая другие ячейки.
Чем больше переменных, тем больше вероятность затирания.
1
Эксперт по математике/физике
4136 / 2041 / 420
Регистрация: 19.07.2009
Сообщений: 3,094
Записей в блоге: 23
02.08.2009, 21:05  [ТС] 6
Спасибо, теперь полностью понятно.
0
Эксперт С++
7171 / 3229 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
02.08.2009, 21:06 7
приведенный мною код (тот, что выделяет под строку 1 байт) работает
Но пишет-то куда попало !
Чтобы уронить программу нужно писать куда попало несколько больше чем 1 байт.
Ну или сразу так:
C++
1
2
char *p= NULL;
*p= '\0;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2009, 21:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Длинная арифметика(вычитание длинных целых чисел)
Добрый вечер! Очень нужна помощь. Мне нужно написать программы для сложения больших целых...

Перевод длинных целых чисел из двоичной в десятичную
Вобщем мне нужна верхняя граница для длины вектора , желательно ,чтобы зависимость была от длины...

Умножение длинных целых 11-ричных чисел в виде строк
Доброго времени суток. Если кому приходилось сталкиваться с умножением двух длинных целых чисел...

Помогите пожалуйста по Одномерному массиву длинных целых чисел!!!
Здравствуйте!!! Помогите пожалуйста решение задачи!!! Одномерный массив длинных целых чисел...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.