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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
AquaSky
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 18
09.10.2008, 18:40     Text -> File.txt -> Console #1
Привет народ, пишу курсовую, 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++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
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++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
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++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
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++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
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++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
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
Ответ Создать тему
Опции темы

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