2 / 2 / 0
Регистрация: 26.03.2012
Сообщений: 57
1

Подключение файлов

03.04.2012, 23:14. Показов 2186. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здраствуйте!
Проблема заключается в том, что при чтении файла формата .txt файл читает но вместо текста :
Congratulations you did it
выводит "китайский" язык, при обявлении
C++
1
char ch;
все вроде нормально ( открывает первый символ ), но как только я пытаюсь обьявить ch как массив, то выводится "китайский" язык. Помогите пожалуста.

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 <fstream>
#include <iostream>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
int main ()
    {  
        char h[30];
        cout<<"File name : ";
        cin>>h;
        cout<<"Open "<<h<<endl;
     fstream fin;
     fin.open(h);  
     char ch[21];   // кажется ошибка здесь 
     fin.get(ch[21]);
     cout<<ch;
    
 
getch();
fin.close();
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2012, 23:14
Ответы с готовыми решениями:

Подключение заголовочных файлов и файлов реализации
Здравствуйте,при создании класса в visual studio руками не компилится проект,при создании через add...

Подключение файлов
Как правильно соединить такие 3 файла: main_doc.cpp (файл с главной функцией, с которого все...

Подключение заголовочных файлов
Как работает подключение заголовчных файлов в Линукс во время компиляции? К примеру имею свой...

Подключение заголовочных файлов
Начал изучать С++, скачал несколько книг и заметил что в одних при включении заголовочных файлов...

14
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
04.04.2012, 09:38 2
Длина строки "Congratulations you did it" == 27 вместе с нулем в конце.

C++
1
2
     char ch[27];
     fin.get(ch, 27);
0
2 / 2 / 0
Регистрация: 26.03.2012
Сообщений: 57
04.04.2012, 19:53  [ТС] 3
Не помогает, пробовал изменять диапазон 23...30 , но безрезультатно. Возможно нужно правильно сохранить файл формата .txt?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
05.04.2012, 00:07 4
Ты не понял, в конец строки ноль не записывается !!!

+ показывай исправленный код. иначе лесом.
1
2 / 2 / 0
Регистрация: 26.03.2012
Сообщений: 57
05.04.2012, 22:42  [ТС] 5
C++
1
2
3
    
     char ch[27/*тут меняю 23 до 30*/];
     fin.get(ch, 27/*соответственно и тут*/);
Я решил проблему другим путем, но хочу до конца понять как этим способом открыть файл?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
05.04.2012, 23:07 6
После get():
ch[27 - 1] = '\0';
0
2 / 2 / 0
Регистрация: 26.03.2012
Сообщений: 57
09.04.2012, 19:49  [ТС] 7
Не вышло, всеравно китайский язык
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
09.04.2012, 20:38 8
Показывай код.
0
2 / 2 / 0
Регистрация: 26.03.2012
Сообщений: 57
09.04.2012, 22:45  [ТС] 9
вариант первый :
C++
1
2
3
4
5
6
7
8
9
        char h[27];
        cout<<"File name : ";
        cin>>h;
        cout<<"Open "<<h<<endl;
     fstream fin;
     fin.open(h);
     char ch[27];
     fin.get(ch[27-1]='\0');
     cout<<ch;
вариант второй :
C++
1
2
3
4
5
6
7
8
9
10
        char h[27];
        cout<<"File name : ";
        cin>>h;
        cout<<"Open "<<h<<endl;
     fstream fin;
     fin.open(h);
     char ch[27];
     fin.get(ch[27]);
     ch[27-1]='\0';
     cout<<ch;
...спасибо что не покидаете меня
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
09.04.2012, 23:04 10
Давай первый вариант вообще рассматривать не будем.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <math.h>
#include <fstream>
#include <iostream>
 
using namespace std;
 
int main()
{
    char h[256];
    cout << "File name : ";
    cin >> h;
    cout << "Open " << h << endl;
 
    fstream fin;
    char    ch[256];
    fin.open( h );
    fin.get( ch, 256 );
    cout << ch;
    fin.close();
 
    return 0;
}
По поводу того что в конец не записывается '\0' похоже я тебе наврал... или не наврал.. я уже не помню.
Не стоит так сильно экономить память, стек хоть и не резиновый но его можно чуть-чуть растянуть. Благо современные технологии позволяют выделить побольше.
1
2 / 2 / 0
Регистрация: 26.03.2012
Сообщений: 57
09.04.2012, 23:51  [ТС] 11
Спасибо огромное!
Как я понял строкой
C++
1
fin.get( ch, 256 );
вы хотите сказать чтобы открытый файл записали в ch на 256 символов? А как записать файл в масив ch с 30 по 60 ячейки?

если не против можете помочь тут?
https://www.cyberforum.ru/visu... 28765.html
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
10.04.2012, 00:33 12
По поводу ссылки:
Это C# или что-то не являющееся Си или С++ или Ассемблером... Увы, но моя религия не позволяет программировать на языках подобного уровня и не признает их.

По поводу:
Цитата Сообщение от 4ININ Посмотреть сообщение
вы хотите сказать чтобы открытый файл записали в ch на 256 символов? А как записать файл в масив ch с 30 по 60 ячейки?
Извините но я не понял сути вопросов.. Вы не через Google-Translate это переводили?

C++
1
fin.get( ch, 256 );
256 - это максимальное количество байт, которое может быть считано из потока и записано в массив (включая терминатор '\0')
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
10.04.2012, 01:03 13
Я бы рекомендовал всё же
Цитата Сообщение от 4ININ Посмотреть сообщение
при чтении файла формата .txt
пользоваться другими приёмами, а именно: использовать строки. Если необхродимо построчно считать, значит построчно, если пословно, значит пословно. Поправил первый код:


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 <fstream>
#include <iostream>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
int main ()
    {  
        char h[30];
        cout<<"File name : ";
        cin>>h;
        cout<<"Open "<<h<<endl;
     fstream fin;
     fin.open(h);  
     string ch;   // êàæåòñÿ îøèáêà çäåñü 
     getline (fin, ch);
 
     cout<<ch;
    
 
getch();
fin.close();
return 0;
}
1
2 / 2 / 0
Регистрация: 26.03.2012
Сообщений: 57
10.04.2012, 01:24  [ТС] 14
Цитата Сообщение от lazybiz Посмотреть сообщение
По поводу ссылки:
Это C# или что-то не являющееся Си или С++ или Ассемблером... Увы, но моя религия не позволяет программировать на языках подобного уровня и не признает их.

По поводу:
Извините но я не понял сути вопросов.. Вы не через Google-Translate это переводили?

C++
1
fin.get( ch, 256 );
256 - это максимальное количество байт, которое может быть считано из потока и записано в массив (включая терминатор '\0')
Нет, ето я сам=)
Я понимаю что ето массив. Но я же могу пользоваться ячейками етого массива например записав в него сначала из одного файла ( который занимает 20 символов ) первые 30 ячеек а потом в етот же массив записать еще символы из другого файла ( например с 31 по 256? ячейку ).
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
10.04.2012, 01:45 15
Я так понимаю это был вопрос... Да! (это был ответ) Конечно можете, главное подойти к этому вопросу более деликатно

P.S.: я любитель пошутить, прошу не счесть мой ответ шуткой или стёбом.
1
10.04.2012, 01:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2012, 01:45
Помогаю со студенческими работами здесь

Подключение заголовочных файлов
Итересует меня вопрос : нужно ли при компиляции программ оставлять только нужные хэдеры ? т.е. их...

Подключение заголовочных файлов
Имею два файла Large Factorial.h #include &lt;sstream&gt; #include &lt;iostream&gt; #include &lt;iomanip&gt;...

Подключение текстовых файлов
Привет. Прошу прощения, если подобная тема уже есть, но я ее не нашел Как вижуал с++ подключить...

Подключение файлов obj
Здравствуйте! Мне очень интересно следующее: допустим есть программа, в которой есть 3 файла (1:...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru