#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;}
с массивом что-то не так!
Код:
в результате при выводе всего массива: первые пять символов, взятые из текстового файла, а потом еще два каких-то не понятных:(
помогите кто чем может!
Цитата: nat
ifstream file ;
file.open("vvod.txt",ios::binary | ios::оut);
почему ios::оut? достаточно просто ios::binary, ты тем более открываешь на чтение.
массив почему-то получается из 8-ми елементов, а я его объявляю temp[5]
ну в чём же я ошибаюсь??????????подскажите!!!
Код:
#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 <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;
}
#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;
}
СПАСИБО!!!!!!!!!!!!!:)
Строка завершается символом 0. Что у тебя там идет в памяти ПОСЛЕ сего массивчика?
Цитата: 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;}
#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;
}
#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;
}
Да и еще читайте из файла не по символам а сразу целый массив
У Вас код намного быстрее будет работать!