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

Не могу понять из-за чего это происходит - C++

Восстановить пароль Регистрация
 
sievmi
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73
03.07.2012, 17:19     Не могу понять из-за чего это происходит #1
Здраствуйте. Вот часть программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <fstream>
using namespace std;
 
int main()
{
    ifstream x("input.txt");
    ofstream d("output.txt");
 
    char a[200][100], c[4];
    int i, j, h, w;
 
    x >> w >> h;
 
    for( i = 0; i < 2*h; i++ )
        x >> a[i];
 
    d << a[0] << "\n";
 
    x >> c;
 
    d << a[0] << "\n";
Сдесь интсрукци яна строке 17 выводит строку нужных мне символов, а второая( на строке 21) ничего не выводит.

Получается элемент a[0] после выполнения инструкции x >> c; становиться пустым ? Или сдесь что-то другое ? Совершенно понять не могу.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
03.07.2012, 17:26     Не могу понять из-за чего это происходит #2
чей то мне не понятно
Цитата Сообщение от sievmi Посмотреть сообщение
char a[200][100],
двумерный массив
а
Цитата Сообщение от sievmi Посмотреть сообщение
x >> a[i];
Цитата Сообщение от sievmi Посмотреть сообщение
d << a[0] << "\n";
работаешь как с одномерным???
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
03.07.2012, 17:29     Не могу понять из-за чего это происходит #3
ValeryS, char a[200][200] - массив из 200 строк длиной 199 символов
a[0] - первая из этого массива строк

sievmi, пример входного файла и полный код программы можно?
sievmi
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73
03.07.2012, 17:31  [ТС]     Не могу понять из-за чего это происходит #4
ValeryS, Ну как бы я считал, что получиться массив строк. Тоесть 200 строк по 100 символов. Разве так нельзя?

Добавлено через 1 минуту
Цитата Сообщение от sandye51 Посмотреть сообщение
ValeryS, char a[200][200] - массив из 200 строк длиной 199 символов
a[0] - первая из этого массива строк
А почему длина 199 символов ?
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
03.07.2012, 17:36     Не могу понять из-за чего это происходит #5
Цитата Сообщение от sievmi Посмотреть сообщение
А почему длина 199 символов ?
1 байт отводится под завершающий нуль-символ
sievmi
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73
03.07.2012, 17:36  [ТС]     Не могу понять из-за чего это происходит #6
sandye51,

Вот полная программа :

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <fstream>
using namespace std;
 
int main()
{
    ifstream x("input.txt");
    ofstream d("output.txt");
 
    char a[200][100], c[4];
    int i, j, h, w;
 
    x >> w >> h;
 
    for( i = 0; i < 2*h; i++ )
        x >> a[i];
 
    x >> c;
 
 
    for( i = 0; i < h; i++ )
    {
        for( j = 0; j < w; j++ )
            if( (a[i][j] == '0') && (a[i+h][j] == '0') )
                d << c[0];
            else
            if( (a[i][j] == '0') && (a[i+h][j] == '1') )
                d << c[1];
            else
            if( (a[i][j] == '1') && (a[i+h][j] == '0') )
                d << c[2];
            else
                d << c[3];
 
        d << "\n";
    }
 
 
    return 0;
 
}
Пример входных данных:
5 3
01000
11110
01000
10110
00010
10110
0110

На выходе должно быть :
11110
11100
11110
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
03.07.2012, 17:36     Не могу понять из-за чего это происходит #7
Цитата Сообщение от sievmi Посмотреть сообщение
Ну как бы я считал, что получиться массив строк. Тоесть 200 строк по 100 символов. Разве так нельзя?
Можно наверное.....
но это как раз тот случай когда нужно комментировать Слету не разберешь
Цитата Сообщение от sievmi Посмотреть сообщение
А почему длина 199 символов ?
потомучто он написал
Цитата Сообщение от sandye51 Посмотреть сообщение
char a[200][200]
а у тебя
Цитата Сообщение от sievmi Посмотреть сообщение
char a[200][100],
200 строк 99 символов
один элемент массива отдай под завершающий 0
sievmi
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73
03.07.2012, 17:38  [ТС]     Не могу понять из-за чего это происходит #8
ТАк а почему все же так происходит ?
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
03.07.2012, 17:41     Не могу понять из-за чего это происходит #9
файл текстовый
Цитата Сообщение от sievmi Посмотреть сообщение
ifstream x("input.txt");
а здесь ты присваиваешь текстовые значения
Цитата Сообщение от sievmi Посмотреть сообщение
5 3
интам
Цитата Сообщение от sievmi Посмотреть сообщение
x >> w >> h;
скорре всего им присвоится 0x35 '5' и 0x33 '3'
проверь отладчиком
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2012, 19:44     Не могу понять из-за чего это происходит
Еще ссылки по теме:

Не могу понять из-за чего ошибка C++
C++ Не могу понять чего выдает всегда 0
Не могу понять, что это значит: while(i<10/2) C++

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

Или воспользуйтесь поиском по форуму:
sievmi
2 / 2 / 0
Регистрация: 20.06.2012
Сообщений: 73
03.07.2012, 19:44  [ТС]     Не могу понять из-за чего это происходит #10
Не могу разобраться как с отладчиком работать в CodeBlocks.

А разве из-за этого может быть эта проблема?
У меня есть предыдущая программа ( рабочая ) которая делает тоже самое, я там так же считывал в инты.
Вот:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <fstream>
using namespace std;
 
int main()
{
    ifstream x("input.txt");
    ofstream d("output.txt");
 
    char a[100][100], b[100][100], c[4];
    int i, j, h, w;
 
    x >> w >> h;
 
    for( i = 0; i < h; i++ )
        for( j = 0; j < w; j++ )
            x >> a[i][j];
 
    for( i = 0; i < h; i++ )
        for( j = 0; j < w; j++ )
            x >> b[i][j];
 
    for( i = 0; i < 4; i++ )
        x >> c[i];
 
    for( i = 0; i < h; i++ )
    {
        for( j = 0; j < w; j++ )
            if( (a[i][j] == '0') && (b[i][j] == '0') )
                d << c[0];
            else
            if( (a[i][j] == '0') && (b[i][j] == '1') )
                d << c[1];
            else
            if( (a[i][j] == '1') && (b[i][j] == '0') )
                d << c[2];
            else
                d << c[3];
 
        d << "\n";
    }
 
    return 0;
 
}
Добавлено через 1 час 47 минут
Если убрать инструкцию x >> c; и считать эту строку в массив a, то все работает.
Но почему с ней не работает я не понял
Yandex
Объявления
03.07.2012, 19:44     Не могу понять из-за чего это происходит
Ответ Создать тему
Опции темы

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