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

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

Войти
Регистрация
Восстановить пароль
 
 
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 200
#1

Почему переменной присваивается произвольное значение("мусор")? - C++

21.04.2014, 02:35. Просмотров 898. Ответов 20
Метки нет (Все метки)

Мой черновой вариант кода. Он очень черновой так что многое не суть важно, но переменной х я присваиваю значение 0. Если после приглашения ввести набор чисел, мы введем что вроде 11111111111111111111111111111111111111111111111111111, то после нажатие enter х получает произвольное значение. Вопрос почему? Проблема решается перестановкой объявления х. Но я хочу понять почему так происходит.
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
25
26
#include<iostream>
#include<clocale>
using std::cout;using std::endl;using std::cin;
int main() {
    std::setlocale(LC_ALL, "Russian_Russia.1251");char z='1';int x=0;
    do {
    char str[25]={0};
    cout<<"Введите набор чисел, буквы из ряда чисел будут убраны автоматически, нельзя вводить ряд из одних букв или ряд длинее 20 символов"<<endl;
    cin>>str;
    for(int i=0;i<25;i++){ 
        if (str[20]!='\0'){cout<<"Ряд слишком линный пожалуста Введите более короткий ряд"<<endl;cin.ignore(255, '\n');break;}
        if (!(str[i]>47 && str[i]<58)&& str[i]!='\0'){
            for (int p=i;p<22;p++){
                str[p]=str[p+1];
            }
        i--;} 
    }
    if (x>=2) {
        cout<<"Если хотите окончить нажмите 0"<<endl;
        z=cin.get();
    }
    for(int i=0;i<25 && str[i]!='\0';i++){cout<<str[i]<<endl;}
    }
    while(z='0');
    system("pause");
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2014, 02:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему переменной присваивается произвольное значение("мусор")? (C++):

Индекс элемента массива, для которого значение функции - минимально. "Мусор в выводе" - C++
Собственно поставлена следующая задача: Разработать функцию P, находящую индекс элемента массива Х, для которого зачение функции f...

Почему, при попытке "взять" адрес переменной,компилятор ее не положит на регистр? - C++
почему, при попытке &quot;взять&quot; адрес переменной,компилятор ее не положит на регистр

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Не присваивается значение переменной - C++
Привет всем форумчанам! :) Собственно само задание в прикрепленных изображениях. Независимо от того, какое бы я значение ни ввел,...

Как "выдрать" значение переменной из цикла - C++
В общем. Есть глобальная переменная. Есть цикл в одной из функций, где значение этой переменной с каждым проходом изменяется. Нужно...

Подскажите почему может появляться ошибка: "неразрешенный внешний символ "_SDL_..."" - C++
Привет всем =) Скажите пожалуйста почему у меня пишет: 1&gt;SDL.obj : error LNK2001: неразрешенный внешний символ &quot;_SDL_CreateCursor&quot; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IrineK
Заблокирован
21.04.2014, 05:25 #16
Если будет что-то интересное, выложите в продолжении этой темы.
0
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 200
21.04.2014, 17:55  [ТС] #17
IrineK, я бы хотел для начала уточнить как выглядит стек в c++. Для упрощения я взял integer 2 байтовый.
C++
1
2
3
4
5
char str[4]={0};
int x;// для первой картинки
 
char str[1]={0};
int x;//для 2
0
IrineK
Заблокирован
21.04.2014, 18:04 #18
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
integer 2 байтовый
выведите sizeof(int)
в самом деле 2-байтовый?
0
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 200
21.04.2014, 18:17  [ТС] #19
IrineK, минуту не получается загрузить изображения. Не я на картинки взял для упрощения взял 2 байтовый это смысл не изменит. Загружу увидете


IrineK, Я себе стек так представляю хотелось бы понять какой из вариантов правильный.
0
Миниатюры
Почему переменной присваивается произвольное значение("мусор")?   Почему переменной присваивается произвольное значение("мусор")?  
IrineK
Заблокирован
21.04.2014, 19:11 #20
Чтобы увидеть "биг пикчу", погуглите "Организация памяти процесса".
Потом вдавайтесь в детали.

Посмотрите в направлении "Дизассемблирование кода". Может, что-то покажется интересным.

P.S. int - по всяком случае в VS - 4-байтный.
1
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 200
21.04.2014, 22:45  [ТС] #21
Цитата Сообщение от IrineK Посмотреть сообщение
Посмотрите в направлении "Дизассемблирование кода"
я не знаю ассемблер и у меня остались о нем очень плохие воспоминания, да и хвататься за все сразу не стоит.
Цитата Сообщение от IrineK Посмотреть сообщение
Организация памяти процесса
нашел море статей, на хабре неплохая, сейчас ищу какую нибудь книгу по этой теме что бы почитать более углубленно.
Цитата Сообщение от IrineK Посмотреть сообщение
P.S. int - по всяком случае в VS - 4-байтный.
я это понимаю просто мне не сруки было рисовать стек на 4 байтный integer.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2014, 22:45
Привет! Вот еще темы с ответами:

Аналог рекурсивной функции, отображающей строку в обратном порядке, выводит "мусор" - C++
Добрый день, при попытке написать аналог рекурсивной функции отображающей строку в обратном порядке напоролся на грабли: #include...

Выводит "мусор" при считывании файла - C++
Вывод // (c) vladyxa13 #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;locale&gt; #include &lt;fstream&gt; using namespace std; ...

Почему не работает функция std::regex_replace(temp,"amp;",""); - C++
Пробую вызывать функцию std::regex_replace(temp,&quot;amp;&quot;,&quot;&quot;); Пишет ошибку: test_ok_ruDlg.cpp 1&gt;d:\visual studio...

Вычищает ли "мусор" команда delete - C++
Все-таки добил свою учебную программку.) И созрело пару вопросов. Первый, самый важный : команда delete objPat в моем коде вычищает уже не...


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

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

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