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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Mysterious Light
Эксперт по математике/физике
3663 / 1758 / 241
Регистрация: 19.07.2009
Сообщений: 2,660
Записей в блоге: 17
#1

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

01.08.2009, 21:31. Просмотров 510. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2009, 21:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение длинных целых (C++):

Создать класс длинных целых чисел - C++
Создать класс длинных целых чисел. Класс имеет конструктор по умолчанию, конструктор - преобразующий long в объект класса. Определить...

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

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

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

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

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

6
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];
1
mirso
525 / 343 / 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;
}
//----------------------------------------------------------------
0
Mysterious Light
Эксперт по математике/физике
3663 / 1758 / 241
Регистрация: 19.07.2009
Сообщений: 2,660
Записей в блоге: 17
02.08.2009, 20:53  [ТС] #4
Добавил после char[100] и стало работать нормально. Тем не менее меня до сих пор смущает то, что при небольших входных числах приведенный мною код (тот, что выделяет под строку 1 байт) работает.
mirso, я твой код не смотрел, потому что он подключает запретный модуль windows.h
0
<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:
Переменные выходят за предлы соего участка памяти, тем самым затирая другие ячейки.
Чем больше переменных, тем больше вероятность затирания.
1
Mysterious Light
Эксперт по математике/физике
3663 / 1758 / 241
Регистрация: 19.07.2009
Сообщений: 2,660
Записей в блоге: 17
02.08.2009, 21:05  [ТС] #6
Спасибо, теперь полностью понятно.
0
odip
Эксперт С++
7157 / 3219 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
02.08.2009, 21:06 #7
приведенный мною код (тот, что выделяет под строку 1 байт) работает
Но пишет-то куда попало !
Чтобы уронить программу нужно писать куда попало несколько больше чем 1 байт.
Ну или сразу так:
C++
1
2
char *p= NULL;
*p= '\0;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2009, 21:06
Привет! Вот еще темы с ответами:

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

Помогите отладить программу: Разработать класс, содержащий вектор длинных целых чисел - C++
Всем привет. Нужна ваша помощь. Ниже задания что бы вы были в курсе что я делаю. Примерно половину заданий я уже выполнил, однако есть кое...

Класс "Массив длинных целых чисел" - C++
1. Создать класс, содержащий динамический массив конечного размера. Тип массива - Массив длинных целых чисел. Класс должен содержать...

Построчное чтение целых чисел из текстового файла с занесением в массив для анализа - C++
Доброго всем здравия! Я новичок в С++, и у меня существует большая необходимость в решении следующей задачи: чтение входного...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
02.08.2009, 21:06
Ответ Создать тему
Опции темы

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