Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/12: Рейтинг темы: голосов - 12, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 26.03.2012
Сообщений: 57

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

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

Студворк — интернет-сервис помощи студентам
Здраствуйте!
Проблема заключается в том, что при чтении файла формата .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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.04.2012, 23:14
Ответы с готовыми решениями:

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

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

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

14
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
04.04.2012, 09:38
Длина строки "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  [ТС]
Не помогает, пробовал изменять диапазон 23...30 , но безрезультатно. Возможно нужно правильно сохранить файл формата .txt?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
05.04.2012, 00:07
Ты не понял, в конец строки ноль не записывается !!!

+ показывай исправленный код. иначе лесом.
1
2 / 2 / 0
Регистрация: 26.03.2012
Сообщений: 57
05.04.2012, 22:42  [ТС]
C++
1
2
3
    
     char ch[27/*тут меняю 23 до 30*/];
     fin.get(ch, 27/*соответственно и тут*/);
Я решил проблему другим путем, но хочу до конца понять как этим способом открыть файл?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
05.04.2012, 23:07
После get():
ch[27 - 1] = '\0';
0
2 / 2 / 0
Регистрация: 26.03.2012
Сообщений: 57
09.04.2012, 19:49  [ТС]
Не вышло, всеравно китайский язык
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
09.04.2012, 20:38
Показывай код.
0
2 / 2 / 0
Регистрация: 26.03.2012
Сообщений: 57
09.04.2012, 22:45  [ТС]
вариант первый :
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
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
09.04.2012, 23:04
Давай первый вариант вообще рассматривать не будем.
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  [ТС]
Спасибо огромное!
Как я понял строкой
C++
1
fin.get( ch, 256 );
вы хотите сказать чтобы открытый файл записали в ch на 256 символов? А как записать файл в масив ch с 30 по 60 ячейки?

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

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

C++
1
fin.get( ch, 256 );
256 - это максимальное количество байт, которое может быть считано из потока и записано в массив (включая терминатор '\0')
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
10.04.2012, 01:03
Я бы рекомендовал всё же
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от lazybiz Посмотреть сообщение
По поводу ссылки:
Это C# или что-то не являющееся Си или С++ или Ассемблером... Увы, но моя религия не позволяет программировать на языках подобного уровня и не признает их.

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

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

P.S.: я любитель пошутить, прошу не счесть мой ответ шуткой или стёбом.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.04.2012, 01:45
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru