Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
AquaSky
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 18
#1

Text -> File.txt -> Console - C++

09.10.2008, 18:40. Просмотров 1765. Ответов 10
Метки нет (Все метки)

Привет народ, пишу курсовую, 2ю неделю меня подкидывет от того что вся литература которую читаю не оказывает влияния на требуемый результат для достижения которого осталось ток с файлом розобраться
Просьба помочь в следующем:
1. Создаем файл.
2. Записываем в него чтото.
3. Выводим это на экран стркоу файла.

Пример того как я "заношу" текст в файл.
C++
1
fprintf(f,"%s\n",mas[i].name);
Пример попытки чтения и вывода на экран.
C++
1
2
fgets(a.name,15,f);
printf("%s",a.name);
Что я делаю нетак? на выводе получаетса бред наподобе ╠╠╠╠╠╠╠╠☺ (в конце смайлик ........ )


Вот собствено вся программа
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <fstream.h>
struct Stud
{
int bal;
char name[15]; Главная структура 
char Surname[15];
};
struct a //Структура в которую буду заносить с тхт данные
{
char bal[3]; 
char name[15]; 
char Surname[15];
};
 
 
void main()
{
FILE *f;
f=fopen("C:\\MyFile.txt","w+");
//----------------------------------------Масив струткуры Студ
int N=0; 
char *massiv = new char[N];
printf("Enter number of elements\n");
scanf("%d",&N);
struct Stud *mas = (struct Stud*)malloc(N*sizeof(struct Stud));
 
//--------------------------------------Заполняем его + записываем в тхт файл
for (int i=0;i<N;i++)
{
printf("\n----%d----\n\tName: ",i+1);
scanf("%s",&mas[i].name);
fprintf(f,"%s\n",mas[i].name);
printf("\n\tSurname: ");
scanf("%s",mas[i].Surname);
fprintf(f,"%s\n",mas[i].Surname);
printf("\n\tBal: ");
scanf("%d",&mas[i].bal);
fprintf(f,"%d\n",mas[i].bal);
printf("\n");
}
 
 
fclose(f);
//--------------------------------------считываем данные с тхт и заносим в структуру а (как я говорил это "Структура в которую буду заносить с тхт данные"
 
a a;
for (i=0;i<1;i++)
{ 
 
fgets(a.name,15,f);
fgets(a.Surname,15,f);
fgets(a.bal,3,f);
 
}
//--------- ПЫТАЕМСЯ вывести на экран.
 
printf("MyFile.txt\n\n\t\t%s",a.name);
printf("\n\t\t%s",a.Surname);
printf("\n\t\t%s\n\n\n",a.bal);
}
Получаем рузультат:
Нейм х
Сенейм х
Бал х
не зависимо от значения х вывод следующий

╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠☺
╠╠╠╠╠╠╠╠╠☺
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠☺
Press any key 2 conti.. =(
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт C++
2221 / 736 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
09.10.2008, 19:01     Text -> File.txt -> Console #2
Код
int N = 0;
char * massiv = new char[N];

Код
 
a a;
тоже класс не надо так делать ))

Код
 
fclose(f);
a a;
for (i=0;i<1;i++)
{ 
fgets(a.name,15,f);
fgets(a.Surname,15,f);
fgets(a.bal,3,f);
}
Тебе не кажется странным,что ты закрыл файл и из него пытаешься считывать?
AquaSky
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 18
09.10.2008, 19:10  [ТС]     Text -> File.txt -> Console #3
да смешно ))) с дебагерами игрался, не поставил назад так как было)
А теперь о твоих советах
1) Поставил fclose(f); в конце программы.
2) название структуры 2й сменил )))) а=ba

Результат:
=====================
=====================
======
Press any key 2 conti.. =(
XuTPbIu_MuHTAu
Эксперт C++
2221 / 736 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
09.10.2008, 19:18     Text -> File.txt -> Console #4
эй,я не советовал переместить закрытие в конец программы
Учитывая последнюю поправку,теперь ты открываешь файл на запись,а пытаешься считать) такие дела...

Добавлено через 4 минуты 1 секунду
Вообще,перейду к советам. Зачем тебе вообще эта структура,"а" ? неужели каждый раз нужно две структуры для чтения и записи?) нет,конечно. В этом случае просто используй форматированный ввод/вывод и для файлов.Так,например:
Код
fscanf("f,%s %s %d",name,surname,bal)
Так же замечу,что ты считываешь N раз,а выводишь один раз в конкретном коде. И еще, не воспринимай то,что я пишу буквально - я даю общие советы,реализовать и применить их нужно тебе самому)
AquaSky
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 18
09.10.2008, 19:19  [ТС]     Text -> File.txt -> Console #5
w+
Создать текстовый файл для чтения/записи

Вроде все оки...... Вроде....
XuTPbIu_MuHTAu
Эксперт C++
2221 / 736 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
09.10.2008, 19:27     Text -> File.txt -> Console #6
"w+" — для записи, с возможностью создания, если файла нет
"w" --- для записи; если указанного файла нет, fopen вернет NULL
"a" --- для записи в конец файла; необходимо, чтобы указанный файл существовал, так же как и в режиме "w"
"a+" --- для записи в конец файла; если файл не существует, он будет создан
"r" -- для чтения
"r+" — для чтения и записи
sort of..

Добавлено через 1 минуту 6 секунд
хотя что-то я сомневаюсь,в надежности этого источника) погугли сам.
AquaSky
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 18
09.10.2008, 19:28  [ТС]     Text -> File.txt -> Console #7
Следуем твоему совету:
fscanf("f,%s %s %d",name,surname,bal)
получаетса строка в тхи такого вида:
Андрей,Гугль,2
как считывать потом розмещая в 3 переменные?
может 2мя структурами проще будет ? )) (в плане написания программы )
XuTPbIu_MuHTAu
Эксперт C++
2221 / 736 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
09.10.2008, 19:32     Text -> File.txt -> Console #8
Cделай просто и эффективно. Запиши. Потом закрой файл.Потом открой для чтения. Считай.
AquaSky
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 18
10.10.2008, 00:07  [ТС]     Text -> File.txt -> Console #9
Получилось!!!!!!!!!! ))) Наконецто!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Добавлено через 4 часа 33 минуты 20 секунд


Помогите розобраться
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
36
struct Stud
{
    int bal;
    char name[15];
    char Surname[15];
};
struct a
{
    char bal[4];
    char name[15];
    char Surname[15];
};
//======================================
         Заполняем *.тхт масивом струтур Stud
//======================================
    
 
           f=fopen("C:\\MyFile.txt","r+");
    printf("MyFile.txt\n");
    for (i=0;i<N;i++)
    {  
//---------------Забераем с *.тхт строки и помещаем их в масив струтур а. 
        fgets(masa[i].name,15,f);
        fgets(masa[i].Surname,15,f);
        fgets(masa[i].bal,4,f);
//-----------------Выводим содржимое масива струтур а на екран.
        printf("\n%s",masa[i].name);
        printf("\n%s",masa[i].Surname);
        printf("\n%s",masa[i].bal);
 
    
    }
 
fclose(f);
 
}
Если масив структуры Студ розмером 2 то при выводе после заполнения получаетса так:

Масив 1
имя
фамилия
бал (3 цифры)

Масив 2
имя
фамилия

Вопрос:
Почему не выводит бал ? и можно ли както по другому заполнять масив структур "а" ? имею ввиду сделать так чтоб вместо char bal[4] было просто int bal и чтоб в него с файла попадала строка чисел.
XuTPbIu_MuHTAu
Эксперт C++
2221 / 736 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
10.10.2008, 00:19     Text -> File.txt -> Console #10
Я уже говорил) убери структуру "а",она не нужна.Есть функции
fprintf
fscanf
которые позволяют вводить-выводить в файл/из файла переменные с использованием форматирования.
сохранение Stud вылгядит так
Код
fprintf(f,"%d %s %s\n",s.bal,s.name,s.surname);
загрузка так:
Код
fscanf(f, "%d %s %s",&s.bal,s.name,s.surname);
P.S для тэга кода есть решетка сверху.выделяешь,нажимаешь решетку.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2008, 14:23     Text -> File.txt -> Console
Еще ссылки по теме:

Cannot open include file: 'libr.h': No such file or directory C++
Cannot open include file: 'iostream.h': No such file or directory C++
C++ Записать в text3.txt строки, которые есть и в text1.txt, и в text2.txt
Переписать все числа из файлов 1.txt и 2.txt в файл 3.txt C++
Error C1083: Cannot open source file: 'Source.cpp': No such file or directory C++

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

Или воспользуйтесь поиском по форуму:
AquaSky
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 18
10.10.2008, 14:23  [ТС]     Text -> File.txt -> Console #11
спс
Код
fscanf(f, "%d %s %s",&s.bal,s.name,s.surname);
данный синтаксис будет считать что после комы и до появы следующей идет строка? (тобишь то, что должно помещатьса в переменную ? )

Добавлено через 29 минут 28 секунд
Да. Работает помогло спс
Yandex
Объявления
10.10.2008, 14:23     Text -> File.txt -> Console
Ответ Создать тему
Опции темы

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