Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

с массивом что-то не так!

14K
07 декабря 2006 года
nat
38 / / 02.12.2006
код такой
Код:
#include <fstream>            
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
int main(){
ifstream file ;
  file.open("vvod.txt",ios::binary | ios::out);
  if(!file) cout<<"can't open file";
  file.seekg(0,ios::beg);
  char temp[5];
  int k=0;
        //забираю из файла 5 символов
  while(k<=4){
   file.get(temp[k]);
   cout<<"\ntemp["<<k<<"]"<<temp[k]; //вывожу каждий елемент массива
   k++; }
   cout<<"\ntemp[]="<<temp<<endl; //вывожу весь массив
   file.close();
   getch();
   return 0;}

в результате при выводе всего массива: первые пять символов, взятые из текстового файла, а потом еще два каких-то не понятных:(
помогите кто чем может!
63
07 декабря 2006 года
Zorkus
2.6K / / 04.11.2006
Цитата: nat

ifstream file ;
file.open("vvod.txt",ios::binary | ios::оut);



почему ios::оut? достаточно просто ios::binary, ты тем более открываешь на чтение.

14K
07 декабря 2006 года
nat
38 / / 02.12.2006
:( ну так одно другому не мешает:confused:
массив почему-то получается из 8-ми елементов, а я его объявляю temp[5]
ну в чём же я ошибаюсь??????????подскажите!!!
3
07 декабря 2006 года
Green
4.8K / / 20.01.2000
Давай отрефакторим твой код
Код:
#include <fstream>            
#include <iostream>
#include <conio.h>
#include <windows.h>  // зачем?
using namespace std;
int main(){
ifstream file ;
  file.open("vvod.txt",ios::binary | ios::out);  // зачем ios::binary ? и тем более ios::out (это уже баг)?
  if(!file) cout<<"can't open file";  // ошибка выполнения, разме может программа выполняться дальше?
  file.seekg(0,ios::beg);  // зачем?
  char temp[5];  // мы собираемся выводить массив, как C-строку, куда же тогда поместить завершающий '\0' ,
  int k=0;
        //забираю из файла 5 символов
  while(k<=4){  // нагляднее использовать for, и ещё нет проверки на конец файла
   file.get(temp[k]);  // правильнее сразу считать весь массив
   cout<<"\ntemp["<<k<<"]"<<temp[k]; //вывожу каждий елемент массива
   k++; }
   cout<<"\ntemp[]="<<temp<<endl; //вывожу весь массив
   file.close();  // нет необходимости, деструктор закроет файл
   getch();
   return 0;}


И так, что имеем:
Код:
#include <fstream>            
#include <iostream>
using namespace std;

int main()
{
  ifstream ("vvod.txt");
  if(!file) {
    cout<<"can't open file";
    return -1;
  }

  char temp[6];  // Пять символов + завершающий '\0'
  file.read(temp, sizeof(temp)-1);  //забираю из файла 5 символов
  temp[sizeof(temp)-1] = '\0';  // завершающий '\0'

  for(int k=0; k<sizeof(temp)-1; k++) {
    cout << "temp[" << k << "] = " << temp[k] << endl; //вывожу каждий елемент массива
  }

   cout << "temp[] = " << temp << endl; //вывожу весь массив

   return 0;
}
14K
07 декабря 2006 года
nat
38 / / 02.12.2006
СПАСИБО!!!!!!!!!!!!!:)
247
08 декабря 2006 года
wanja
1.2K / / 03.02.2003
Строка завершается символом 0. Что у тебя там идет в памяти ПОСЛЕ сего массивчика?
24K
11 декабря 2006 года
yanart
1 / / 11.12.2006
Цитата: nat
код такой
Код:
#include <fstream>            
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
int main(){
ifstream file ;
  file.open("vvod.txt",ios::binary | ios::out);
  if(!file) cout<<"can't open file";
  file.seekg(0,ios::beg);
  char temp[5];
  int k=0;
        //забираю из файла 5 символов
  while(k<=4){
   file.get(temp[k]);
   cout<<"\ntemp["<<k<<"]"<<temp[k]; //вывожу каждий елемент массива
   k++; }
   cout<<"\ntemp[]="<<temp<<endl; //вывожу весь массив
   file.close();
   getch();
   return 0;}

в результате при выводе всего массива: первые пять символов, взятые из текстового файла, а потом еще два каких-то не понятных:(
помогите кто чем может!



Все так, только при выводе строки должен быть 0 - означающий конец этой строки.

Код:
#include <fstream>            
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;

int main(int argc, char* argv[])
{
  ifstream file ;
  file.open("vvod.txt",ios::binary | ios::out);
  if(!file) cout<<"can't open file";
  char temp[6];
  for (int i = 0;i<5;i++)
  {
      file.get(temp);
      cout<<"\ntemp["<<i<<"]"<<temp;
  }
  temp=0;  
  cout<<"\ntemp[]="<<temp<<endl;
  file.close();
  getch();
  return 0;
}

Да и еще читайте из файла не по символам а сразу целый массив
У Вас код намного быстрее будет работать!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог