Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
-3 / 0 / 1
Регистрация: 29.03.2018
Сообщений: 395

Почему-то неправильно считается кол-во элементов массива

21.08.2019, 18:36. Показов 2430. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В последнем цикле считывается текст из файла и вместе с этим подсчитывается кол-во символов. Текст "HRYSKFQPXC" почему-то содержит 15 символов вместо десяти, оставшиеся, разумеется, заполняются случайной хренью.
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
 
using namespace std;
 
int main()
{
    int i,j,cnt=0,z,x,y,lE=0;
    int c1[100],c2s[100],c2[100];
    char key[10][3],msg[100];
 
    ifstream fin;
    ofstream fout;
 
    fin.open("key.txt");
 
    for(i=0;i<10;i++)
        for(j=0;j<3;j++)
            fin>>key[i][j];
 
    fin.close();
 
    for(i=0;i<10;i++)
        {
            for(j=0;j<3;j++)
            {
                if(cnt==10)
                    {cout<<endl; cnt=0;}
 
                cout<<key[i][j];
 
                cnt++;
            }
        }
 
    cnt=0,
 
    cout<<endl<<endl;
 
    fin.open("sI.txt");
 
    for(i=0;;i++)
    {
        fin>>msg[i];
 
        lE++;
 
        if(msg[i]=='\0')
        {
            lE--;
 
            break;
        }
    }
 
    fin.close();
 
    for(z=0;z<lE;z++)
        cout<<msg[z];
 
    cout<<endl<<endl<<lE;
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.08.2019, 18:36
Ответы с готовыми решениями:

Почему не считается кол-во отриц. элементов
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids,...

Неправильно считается сумма, произведение нечётных положительных элементов массива
Найти сумму,произвидение нечётных положительных элементов массива Проблема в том,что например ввёл 1,2,3 То Сумма 6, произведение 6, а...

Неправильно считается произведение элементов массива, принадлежащих заданному диапазона
В одномерном массиве, который состоит из n целых элементов, вычислить произведение элементов массива из диапазона , расположенных между...

25
Злостный нарушитель
 Аватар для Verevkin
10240 / 5669 / 1260
Регистрация: 12.03.2015
Сообщений: 26,275
21.08.2019, 19:47
Ну чо так извращаться-то? Зачем читать файл побайтно, а не построчно, хотя бы.
Естественно, мусор в строке, т.к. этот буфер выделен на стеке. Обнули его.
Например, так:
C++
1
2
memset(msg, 0, sizeof(msg));
fin.open("sI.txt");
0
-3 / 0 / 1
Регистрация: 29.03.2018
Сообщений: 395
21.08.2019, 19:58  [ТС]
Мне бы просто исправить подсчитывание символов, а там уже и выводиться ничего лишнего не будет.
0
Злостный нарушитель
 Аватар для Verevkin
10240 / 5669 / 1260
Регистрация: 12.03.2015
Сообщений: 26,275
21.08.2019, 20:09
Лучший ответ Сообщение было отмечено ChioraYaz как решение

Решение

Цитата Сообщение от ChioraYaz Посмотреть сообщение
Мне бы просто исправить подсчитывание символов,
C++
1
strlen();
Тебе обязательно читать файл посимвольно? Мож лучше поюзать какой-нить fgets()?
-------
У тебя цикл до первого нуля. Ты уверен, что в твоём файле он есть?
1
 Аватар для SomniPhobia
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,406
21.08.2019, 20:12
ChioraYaz, привет!
Цитата Сообщение от ChioraYaz Посмотреть сообщение
считывается текст из файла
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <string>
#include <fstream>
 
int main()
{
    const std::string path("sI.txt");
 
    std::ifstream fin;
    fin.open(path);
    if (!fin.is_open())
        return 1;
    std::string dump;
    for (; fin.good();)
    {
        std::string line;
        std::getline(fin, line);
        dump += line + "\n";
    }
    fin.close();
    std::cout << dump << "\n";
    //std::cout << "count symbols " << dump.length() << "\n";
 
    return 0;
}
Миниатюры
Почему-то неправильно считается кол-во элементов массива  
0
-3 / 0 / 1
Регистрация: 29.03.2018
Сообщений: 395
21.08.2019, 20:37  [ТС]
Мне именно посимвольно и необходимо.
Я ещё пытался до перехода на следующую строку считывать, но так тоже не работало, да и выглядело бы кривовато.
0
Злостный нарушитель
 Аватар для Verevkin
10240 / 5669 / 1260
Регистрация: 12.03.2015
Сообщений: 26,275
21.08.2019, 20:38
Цитата Сообщение от ChioraYaz Посмотреть сообщение
Мне именно посимвольно и необходимо.
Зачем?
Покаж условие задачи..
0
-3 / 0 / 1
Регистрация: 29.03.2018
Сообщений: 395
21.08.2019, 20:50  [ТС]
Мне нужно сделать программу, которая будет шифровать и декодировать текст, используя шифр Чейза.

Добавлено через 1 минуту
Там, вроде, всё понятно. Было, до этого момента.
0
Злостный нарушитель
 Аватар для Verevkin
10240 / 5669 / 1260
Регистрация: 12.03.2015
Сообщений: 26,275
21.08.2019, 21:00
Цитата Сообщение от ChioraYaz Посмотреть сообщение
Мне нужно сделать программу, которая будет шифровать и декодировать текст, используя шифр Чейза.
Ну и зачем читать файл посимвольно-то? Загрузи его в память целиком и шифруй на здоровье.
Покаж файл.
0
-3 / 0 / 1
Регистрация: 29.03.2018
Сообщений: 395
21.08.2019, 21:10  [ТС]
Просто .txt файл, что вводишь, то и должно будет кодировать.
Кстати, я сейчас воткнул lE=strlen(msg), вроде, всё в норме теперь.
0
Злостный нарушитель
 Аватар для Verevkin
10240 / 5669 / 1260
Регистрация: 12.03.2015
Сообщений: 26,275
21.08.2019, 21:43
Цитата Сообщение от ChioraYaz Посмотреть сообщение
я сейчас воткнул lE=strlen(msg), вроде, всё в норме теперь.
Ну и хрен с тобой. Когда будешь работать с файлами в несколько Мбайт, всё равно придётся делать это по-нормальному, а не через жопу посимвольно.
1
-3 / 0 / 1
Регистрация: 29.03.2018
Сообщений: 395
21.08.2019, 21:59  [ТС]
Для шифрования нужно знать координаты букв в таблице. Я добавил цикл, который сравнивает элементы слова с элементами таблицы и записывает их координаты, но программа просто сразу крашится на этом моменте.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    for(z=0;z<lE;z++)
        for(i=0;i<10;i++)
            for(j=0;j<3;j++)
            {
                if(msg[z]==key[i][j])
                {
                    c1[x]=i;
 
                    c2s[x]=j;
 
                    x++;
 
                    cout<<x<<endl;
                }
            }
 
    x--;
0
Злостный нарушитель
 Аватар для Verevkin
10240 / 5669 / 1260
Регистрация: 12.03.2015
Сообщений: 26,275
21.08.2019, 22:32
Цитата Сообщение от ChioraYaz Посмотреть сообщение
Я добавил цикл, который сравнивает элементы слова с элементами таблицы и записывает их координаты, но программа просто сразу крашится на этом моменте. А что такое "х" и чем он инициализирован - догадайтесь сами, телепаты грёбанные!
Да?
0
-3 / 0 / 1
Регистрация: 29.03.2018
Сообщений: 395
21.08.2019, 23:15  [ТС]
Я же сверху прикладывал весь код, там всё объявлено.

Добавлено через 3 минуты
Таблица выглядит вот так, я её тоже из файла буду считывать, чтобы не писать каждый раз.
Q W E R T Y U I O P
A S D F G H J K L Z
X C V B N M < > \ /
0
Злостный нарушитель
 Аватар для Verevkin
10240 / 5669 / 1260
Регистрация: 12.03.2015
Сообщений: 26,275
21.08.2019, 23:16
Цитата Сообщение от ChioraYaz Посмотреть сообщение
Я же сверху прикладывал весь код, там всё объявлено.
да йопть...

0
-3 / 0 / 1
Регистрация: 29.03.2018
Сообщений: 395
21.08.2019, 23:21  [ТС]
Вот чёрт, а я и забыл, что обнуления нет. Теперь всё правильно ищет, все координаты 10 букв есть.
0
Злостный нарушитель
 Аватар для Verevkin
10240 / 5669 / 1260
Регистрация: 12.03.2015
Сообщений: 26,275
21.08.2019, 23:24
Цитата Сообщение от ChioraYaz Посмотреть сообщение
Теперь всё правильно ищет, все координаты 10 букв есть.
Вот теперь ты молодец.
1
-3 / 0 / 1
Регистрация: 29.03.2018
Сообщений: 395
22.08.2019, 12:58  [ТС]
Я тут заметил, что число 10 ломает шифр, исправил, теперь вместо 10, как и положено, будет 0, но я заметил одну проблему: координаты неправильные, причём они ищутся неправильно и в старом коде. Я не знаю, может, я опять забыл о чём-то, но цикл делает что-то не то.

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
 
using namespace std;
 
int main()
{
    int i,j,cnt=0,z=0,x=0,y=1,lE=0,mt=1,xC=0;
    int c1[100],c2s[100],c2[100];
    char key[10][3],msg[100];
 
    ifstream fin;
    ofstream fout;
 
    fin.open("key.txt");
 
    for(i=0;i<10;i++)
        for(j=0;j<3;j++)
            fin>>key[i][j];
 
    fin.close();
 
    for(i=0;i<10;i++)
        {
            for(j=0;j<3;j++)
            {
                if(cnt==10)
                    {cout<<endl; cnt=0;}
 
                cout<<key[i][j];
 
                cnt++;
            }
        }
 
    cnt=0,
 
    cout<<endl<<endl;
 
    memset(msg, 0, sizeof(msg));
 
    fin.open("sI.txt");
 
    for(i=0;;i++)
    {
        fin>>msg[i];
 
        if(msg[i]=='\0')
        {
            break;
        }
    }
 
    fin.close();
 
    lE=strlen(msg);
 
    for(z=0;z<lE;z++)
        cout<<msg[z];
 
    cout<<endl<<endl<<lE<<endl<<endl;
 
    for(z=0;z<lE;z++)
        for(i=0;i<10;i++)
            for(j=0;j<3;j++)
            {
                if(msg[z]==key[i][j])
                {
                    if(i==9 || j==9)
                    {
                        if(i==9)
                        {
                            c1[x]=0;
 
                            c2s[x]=j+1;
                        }
                        else
                        {
                            c1[x]=i+1;
 
                            c2s[x]=0;
                        }
                    }
                    else
                    {
                        c1[x]=i+1;
 
                        c2s[x]=j+1;
                    }
 
                    x++;
                }
            }
 
    x--;
 
    for(z=0;z<lE;z++)
        cout<<c1[z];
 
    cout<<endl;
 
    for(z=0;z<lE;z++)
        cout<<c2s[z];
 
    return 0;
}
0
Злостный нарушитель
 Аватар для Verevkin
10240 / 5669 / 1260
Регистрация: 12.03.2015
Сообщений: 26,275
22.08.2019, 14:11
Цитата Сообщение от ChioraYaz Посмотреть сообщение
Я не знаю, может, я опять забыл о чём-то, но цикл делает что-то не то.
Пока не научишься разделять код на функции, а не сувать всё подряд в main() - так и будет.
0
-3 / 0 / 1
Регистрация: 29.03.2018
Сообщений: 395
22.08.2019, 14:17  [ТС]
Как-то не понравилось мне с по функциям всё раскидывать, в мэине удобнее по порядку всё делать.
А сравнение элементов точно верно записано? Не нужно вместо этого вставить сравнение кода символа?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.08.2019, 14:17
Помогаю со студенческими работами здесь

Считается неправильно, почему?
Подскажите пожалуйста! я перемножаю числа которые находятся в текст боксах, для этого написал формулу : Text15.Text =...

Почему неправильно считается результат?
Помогите,пожалуйста:создал два вычисляемых поля Ставка и Сумма в таблице &quot;Платежи&quot;,однако Access их считает неправильно.Например,...

Почему неправильно считается формула?
Вопрос в заголовке.Программа написана вроде правильно, ошибок не вижу. P.S. Так как переменные height, periodicity, conductivity...

Почему неправильно считается простое математическое выражение?
Всем привет. Вопрос будет очень банальным: я правильно записал выражение? double R = (2 * Math.Pow(a, 3) - 9 * a * b + 27 * c) / 54; ....

Стационарное распределение марковской цепи считается неправильно, почему-то
Моделирую марковский процесс. Конкретно Матрицу переходных вероятностей. Но вот неудача, при расчете стационарного распределения(пи)...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru