Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 10.04.2019
Сообщений: 3
1

Переменная забивается мусором

13.04.2019, 00:03. Показов 675. Ответов 3

Всем привет! Появился один маленький вопрос. Пишу сюда в первый раз, кодить начал относительно недавно, по этому код может показаться вам очень странным, не ругайтесь))

Крч суть такая, написал на С++ прогу, которая анализирует 2 входных файла.txt (в них по строчкам разбиты слова и предложения на англ. и на рус. + символы, кодировка UTF-8 вроде), дальше она закидывает в третий файл только те строчки, которые есть в первом файле, но нету во втором.

Парюсь я с ним уже часа 3, весь инет обрыскал, ничего не нашел. Суть такая - сначала он мне просто взял и копирнул весь 1 файл в 3, после я пытался что-то сделать и теперь он вообще не копирует ничего в 3 файл, хотя логика и синтаксис проги вроде как верны (с моей точки зрения), я уже реально не знаю на что грешить.

Когда я решил пройтись дебагом понял, что когда у меня переменная типа char для хранения строки берет строку из файла с помощью getline, вместо нужного он забивает эту переменную какой-то дикой ересью. Опять таки ничего не могу найти в инете по этому поводу. Меня вот и интересует почему эта переменная забивается непонятно чем, вместо строк из файла. Как исправить, подскажите, пожалуйста!

Саму папку с CodeBlocks перекинул по пути D:\Projects Unity\Project CodeBlocks\TXT_Line_Deleter\Duplikate\ (Чтобы не было русского языка и знаков в пути), файлы исходные лежат прямо в папке с main.cpp, винда 10 х64, не знаю че еще рассказать, спрашивайте что вам еще потребуется)))

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
#include <windows.h>
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
    char buff1[200];
    char buff2[200];
    ifstream input;
    ifstream input1;
    ofstream output;
    input.open("input.txt");
    input1.open("input1.txt");
    output.open("output.txt");
    int a;
    cin.sync();
    for (int i=1; i<688 ; i++)
    {
        a=0;
        input.getline(buff1, 200);
        for (int j=1; j<470; j++)
        {
            input1.getline(buff2, 200);
            if (strcmp(buff1, buff2))
            {
                a=1;
            }
        }
        if (a==0)
        {
            output << buff1 << endl;
        }
 
    }
    output.close();
    input.close();
    input1.close();
 
return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2019, 00:03
Ответы с готовыми решениями:

Забивается память
Здравствуйте, Уважаемые Форумчане! Написанная программа ведёт расчёт в реальном масштабе времени....

массив типа byte забивается не тем чем нужно
вот кусок кода int i; unsigned char buffer; int tmpBuf; double mult; double mag; ...

Public переменная, или private переменная и функции get/set
Пишу свой класс, который потом будет много где использоваться и пытаюсь осознать, как правильнее и,...

Инициализация объекта нулями или мусором
Здравствуйте. Я бы воспользовался поиском, но даже не знаю, как ему сформулировать вопрос. ...

3
зомбяк
1533 / 1178 / 332
Регистрация: 14.05.2017
Сообщений: 3,824
13.04.2019, 14:35 2
Цитата Сообщение от pavel954 Посмотреть сообщение
переменную какой-то дикой ересью
Не ересью, а строкой в UTF-8. Почитай про эту кодировку и узнаешь, что там символы имеют переменную длину, а значит могут занимать и 2 char'а, и 4. Кроме того, обычный дебаггер такую кодировку не распознает (будет использовать ту, которая в операционной системе задана. Если речь о винде, то скорее всего CP1251 - https://ru.wikipedia.org/wiki/Windows-1251). Так что возьми файлы именно в такой, 8-битной кодировке. А уже потом переходи к UTF-8.
1
0 / 0 / 0
Регистрация: 10.04.2019
Сообщений: 3
13.04.2019, 18:56  [ТС] 3
Смотри, когда я сохраняю текстовый файл, у меня 4 варианта кодировки: UTF-8, ANSI, юникод big endian и просто юникод. Если сохраняю их в двух последний кодировках, то файл на выходе весит 2кб, но в нем ничего нету, если в двух первых, то файл вообще пустой. И это еще при том, что пока я там что-то в проге не изменил, то кое-как криво код работал и в файле в одной из кодировок записывались значения (пусть и неверные).
0
0 / 0 / 0
Регистрация: 10.04.2019
Сообщений: 3
14.04.2019, 13:44  [ТС] 4
Вот если взять пример:
файл input.txt:
Строка1
Строка 1
Строка
STRL
STRL1
STRL 1
11 11 11 @#$%

Файл input1.txt:
Строка1
Строка 1
Строка




STRL1
STRL 1
11 11 11 @#$%

В результате работы кода появляется файл output.txt, в котором нет ничего, но который весит 2кб. Могу скинуть его, если надо будет ( при этом значения i и j я изменил на соответствующее количество строк в файле). Почему не работает то?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2019, 13:44

Матрица заполняется мусором, а нужно нулями. (с++)
Пока наброски, даже без отчистки памяти, но уже на этом этапе не работает не правильно . В итоге...

С new первые 2 элемента массива заполняются мусором.
Написал маленькую программу в которую вводиш текст а потом она тебе снова этот текст выдаёт, но...

Есть ли какая-то функция показывающая, что число уже является мусором
...

Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз
Исходники: /* main.cpp */ #include &quot;hider.h&quot; int main(void) { return 0; } /* foo.cpp */


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

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

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