Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mikhail90
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
#1

НЕ записывается содержимое файла в переменную типа char - C++

06.08.2013, 12:46. Просмотров 842. Ответов 13
Метки нет (Все метки)

Нужно открыть файл, сохранить содержимое текста файла в переменную типа char под названием buffer и вывести переменную buffer на экран. При выводе этой переменной у меня отображается ноль, помогите исправить

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
#include<iostream>
#include<string.h>
#include<fstream>
using namespace std ;
 
int main ()
{
    setlocale(0,"") ;
    cout << "Положите файл для считывания на диск С," << endl
        << "назовите его 11.txt, " << endl 
        << "после того, как положили нажмите ENTER" << endl ;
    cin.get() ;
    ifstream ReadFile ("C:\\11.txt") ;
 
    if (ReadFile == NULL)
        cout << "Файл отсутствует" << endl ;
    else
    {
        char buffer ;
        cout << "Содержимое вашего файла: " << endl << endl ;
        ReadFile >> buffer ;
        cout << buffer ;
    }
 
    return 0 ;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2013, 12:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос НЕ записывается содержимое файла в переменную типа char (C++):

Как сделать переменную типа char именем файла - C++
Есть переменная(массив) типа char с произвольным количеством символов внитри Как сделать так чтобы когда я создаю файл к примеру таким...

В переменную типа string записывается только первое слово строки - C++
Как вписывать предложения в тип string (если возможно)? То есть скажем после string randomstr; cin &gt;&gt; randomstr; // вводим например...

Есть переменная типа char содержащая цифру; как записать это значение в переменную типа int? - C++
Пожалуйста, напомните стандартную функцию

Очистить переменную типа char * - C++
Привет. Тупит код: char *rt; int port=4; rt=&quot;COM&quot;; char temp1; //временная перем. ...

Занести число в переменную, типа char - C++
char a; cin&gt;&gt;a; a=3; Тут при чтении с клавы мы считываем символ , т.е. если я введу 3, то а будет равно 3, а при присваивании а =...

Как сравнить переменную типа char - C++
нужно найти элементы типа char различные от нуля, программу я написал, а вот не получается сравнивать #include &lt;iostream&gt; #include...

13
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
06.08.2013, 12:51 #2
В переменную типа char считается один символ. Если у вас первый символ в файле - ноль, то все правильно выводит.
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
06.08.2013, 13:09 #3
Цитата Сообщение от mikhail90 Посмотреть сообщение
char buffer ;
Измени на char buffer[1000]; и попробуй мб заработает.
0
mikhail90
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
06.08.2013, 13:11  [ТС] #4
Цитата Сообщение от ninja2 Посмотреть сообщение
Измени на char buffer[1000]; и попробуй мб заработает.
Заменил, отображает только первое слово.

Вот содержимое всего файла:

Один - два ? три
ЧеТыРе Пять. Шесть, Семь
Семь : Шесть ; Пять Один !
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
06.08.2013, 13:17 #5
Цитата Сообщение от mikhail90 Посмотреть сообщение
Заменил, отображает только первое слово.
Попробуй
Цитата Сообщение от mikhail90 Посмотреть сообщение
ReadFile >> buffer ;
заменить на
C++
1
2
3
4
5
6
int i=0;
char c;
while(ReadFile.get(c))
{
buffer[i++]=c;
}
мб заработает.
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
06.08.2013, 13:18 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <fstream>
 
int main()
{
    std::ifstream file("text.txt") ;
    if (!file.good()) return 1;
    file.seekg(0, std::ifstream::end);
    size_t size = file.tellg();
    file.seekg(0, std::ifstream::beg);
    char *text = new char[size];
    file.read(text, size);
    std::cout << text;
    delete [] text;
    return 0 ;
}
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
06.08.2013, 13:22 #7
Цитата Сообщение от ninja2 Посмотреть сообщение
int i;
отут int i=0; нужно я чуток ошибся.
0
mikhail90
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
06.08.2013, 14:36  [ТС] #8
Цитата Сообщение от ninja2 Посмотреть сообщение
int i=0;
char c;
while(ReadFile.get(c))
{
buffer[i++]=c;
}
Тут нужно будет тогда конкретно объявлять , например так, buffer[10000]. И при печати, после прочтения файла, он будет дальше всякую ерунду печатать , пока массив не заполнится. Попробовал так обойти, не получается

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
#include<iostream>
#include<string.h>
#include<fstream>
 
using namespace std ;
 
int main ()
{
    setlocale(0,"") ;
    cout << "Положите файл для считывания на диск С," << endl
        << "назовите его 11.txt, " << endl 
        << "после того, как положили нажмите ENTER" << endl ;
    cin.get() ;
    ifstream ReadFile ("C:\\11.txt") ;
 
    if (ReadFile == NULL)
        cout << "Файл отсутствует" << endl ;
    else
    {
        char buffer[10000] ;
        int i = 0;
        char c;
        while(ReadFile.get(c))
        {
            if (c == '\0')
                break ;
           buffer[i++] = c;
        }
        cout << "Содержимое файла:" << endl << endl ;
        cout << buffer << endl << endl;
    }
 
    return 0 ;
}
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
06.08.2013, 14:54 #9
Цитата Сообщение от mikhail90 Посмотреть сообщение
if (c == '\0')
и какое это отношение имеет к файлам?

Добавлено через 57 секунд
еще раз взгляните на рабочий вариант
НЕ записывается содержимое файла в переменную типа char
0
mikhail90
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
06.08.2013, 15:01  [ТС] #10
Объясните тогда , что за функции good(), seekg(), tellg(), я с ними просто не встречался
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
06.08.2013, 15:02 #11
mikhail90, а поискать сложно?
http://www.cplusplus.com/reference/fstream/ifstream/
0
Fintt
10 / 10 / 0
Регистрация: 13.02.2012
Сообщений: 94
06.08.2013, 15:10 #12
Вот держи
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
// 6.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include<iostream>
#include<string.h>
#include<fstream>
#include <conio.h>
 
using namespace std ;
 
int main ()
{
    setlocale(0,"") ;
    cout << "Положите файл для считывания на диск С," << endl
        << "назовите его 11.txt, " << endl 
        << "после того, как положили нажмите ENTER" << endl ;
    char buffer[1000] ;
    cin.get();
    ifstream ReadFile ("C:\\11.txt") ;
    if (!ReadFile)
        cout << "Файл отсутствует" << endl ;
    else
    {
        cout << "Содержимое вашего файла: " << endl << endl ;
        while (ReadFile)
        {
        ReadFile.getline(buffer, 1000); //выводит в исходном в виде игнорируя пробелы, таб и конец строки
        cout << buffer<<endl ;
        }
    }
    ReadFile.close(); //Нужно закрыть поток
    getch();
    return 0 ;
}
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
06.08.2013, 15:33 #13
Цитата Сообщение от mikhail90 Посмотреть сообщение
Попробовал так обойти, не получается
После этого цикла
C++
1
2
3
4
5
6
while(ReadFile.get(c))
        {
            if (c == '\0')
                break ;
           buffer[i++] = c;
        }
добавсь строчку
buffer[i]='\0'; и мб заработает.
0
zybrzybr
17 / 16 / 0
Регистрация: 29.09.2010
Сообщений: 156
06.08.2013, 15:56 #14
Цитата Сообщение от mikhail90 Посмотреть сообщение
seekg(), tellg(),
seekg(i) - метод класса istream который должен установить указатель get в позицию i для ввода а поток.
а вот tellg() - ВОЗВРАЩАЕТ как раз тот самый указатель get
указатель get - это номер в файле очередного вводимого байта
0
06.08.2013, 15:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2013, 15:56
Привет! Вот еще темы с ответами:

Не могу обнулить переменную типа char - C++
Доброго времени суток, помогите обнулить переменную, т.к. мой компилятор ругается &quot;E2277 Lvalue required&quot; char inBuffer; ...

Ввод символов в переменную типа char - C++
Почему после ввода больше 1-го символа выбивает default? #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using...

Передать переменную типа char по ссылке - C++
доброго времени суток. помогите над очень простым задание из одной книги. Создайте функцию, которая получает аргумент char&amp; и...

Вывести с помощью printf переменную типа char* - C++
Добрый день! Подскажите: есть переменная &quot;message&quot; типа char* Если пишу: printf(&quot;\n%*d %c &quot;, offset--, (char*)message, i ? '+' :...


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

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

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