Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 06.12.2011
Сообщений: 18

Считывание данных из файла

10.09.2012, 11:38. Показов 843. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
почему не првильно работает считывание из файла?
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
#include <iostream.h>
#include <conio.h>
#include <malloc.h>
#include <string.h>
#include <fstream.h>
 
 
int menu_m()
{
 int a;
  cout<<"1. po ukazannomu articulu"<<endl;
  cout<<"2. po pervoy bukve artikula"<<endl;
  cout<<": ";
  cin>>a;
 return a;
}
 
void main()
{
 clrscr();
 
 struct ob
 {
  char artikul[5];
  char opisanie[15];
  int cena;
  int kolvo;
 };
 
 ob *a;
 int i,otvet;
 int n;
 
 const char
    *input="D:/infile.txt";
   // *output="D:/result.txt";
 
 cout<<"File dlya chteniya otkrit"<<endl;
 ifstream in(input);
 
 if (!in)
 {
  cerr<<"Oshibka otkritiya!";
 }
 else
 {
  in>>n;
  a=(ob *)calloc(n,sizeof(ob));
  for(i=1;i<=n;i++)
  {
    in>>a[i].artikul;
    in>>a[i].opisanie;
    in>>a[i].cena;
    in>>a[i].kolvo;
  }
 }
 cout<<"Dannye uspeshno schitany."<<endl;
получается эта билеберда
.
получается что в переменную артикула заносится и артикул и описание,а в описание мусор и описание.
исходный файл(текстовый)
7
D0011 sandali 500 16
D1273 sapogi 900 3
P7324 sapogi 750 2
D3428 tufli 700 12
M0012 sandali 600 10
M1128 botinki 800 4
P1121 botinki 750 3
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.09.2012, 11:38
Ответы с готовыми решениями:

Запрос данных из файла. Проблема в открывании файла и считывание из него данных
Не понимаю что не так, программа не хочет открывать файл... Пробовал и перемещать его, и использовать другие команды для его вызова... (Щас...

Считывание данных из файла
Нужно реализовать вывод данных структуры из файла.. Задание: Заполнение футбольных команд и вывод их на экран. Вводим: название...

Считывание данных из файла
Всем привет, возник вопрос. Нужно считывать из .txt файла координаты точек в массив, размерность которого . Но т.к числа разделены...

7
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
10.09.2012, 14:37
Откуда ты знаешь, что данные в структурах похерены ?
Как ты выводишь их на экран ?
0
0 / 0 / 0
Регистрация: 06.12.2011
Сообщений: 18
10.09.2012, 15:00  [ТС]
по F8 когда программу прогоняешь ту часть,где данные считываются,то получается,что в артикул сначала толкает артикул,потом дописывает описание сюда же и в само поле описание.А на экран вывожу
C++
1
2
3
4
for(i=1;i<=n;i++)
 {
  cout<<a[i].artikul<<" "<<cout<<a[i].opisanie<<" "<<a[i].cena<<" "<<a[i].kolvo<<endl;
 }
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
10.09.2012, 16:02
Ну что ж, особенность первая.
При выполнении команды cout << a, где a - char[] или char*,
команда будет пытаться выводить символы до символа '\0'. Иными словами, сишные строки должны заканчиваться на нулевой символ.
У тебя же будет ровно 5 байтов данных, после которого cout увидит мусор (artikul[5], artikul[6] и т.д.) и посчитает его данными тоже.

Короче, проведи эксперимент:
Либо
а. выдели 6 байт под артикул не меняя входного файла и посмотри как меняется вывод (я запятые здесь не забыл?
либо
б. используй std::string вместо char[].

В случае a имей ввиду, что 6й символ будет нулевым, указывающим на конец строки.
1
0 / 0 / 0
Регистрация: 06.12.2011
Сообщений: 18
10.09.2012, 21:00  [ТС]
сделала так
C++
1
2
3
4
5
6
7
8
9
10
11
12
in>>n;
  in.ignore(1);
  a=(ob *)calloc(n,sizeof(ob));
  for(i=0;i<n;i++)
  {
    in.getline(a[i].artikul,6);
    in.ignore(1);
    in.getline(a[i].opisanie,15,' ');
    in>>a[i].cena;
    in>>a[i].kolvo;
    in.ignore(1);
  }
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
11.09.2012, 00:13
работает ?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
11.09.2012, 05:14
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
int main()
{
 system("cls");
 
 struct ob
 {
  char artikul[6];
  char opisanie[15];
  int cena;
  int kolvo;
 };
 
 ob *a;
 int i,otvet;
 int n = 1;
 
 
 //const char *input ="D:/result.txt";
 const char *input = "infile.txt";
   // *output="D:/result.txt";
 
 cout<<"File dlya chteniya otkrit"<<endl;
 
 ifstream in(input);
 
 if (!in)
 {
  cerr<<"Oshibka otkritiya!";
 }
 else
 {
  in >> n;
  a=(ob *)calloc(n, sizeof(ob));
  for(i = 0; i < n; i++)
  {
    in >> a[i].artikul;
    in >> a[i].opisanie;
    in >> a[i].cena;
    in >> a[i].kolvo;
    cout << a[i].artikul << " " <<a[i].opisanie << " " <<a[i].cena<< " " <<a[i].kolvo << endl;
  }
 }
cout<<"Dannye uspeshno schitany."<<endl;
free (a);
in.close();
 
 system("pause");
 return 0;
}
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
У тебя же будет ровно 5 байтов данных, после которого cout увидит мусор (artikul[5], artikul[6] и т.д.)
Там не мусор, а следующее поле структуры (opisanie). Поэтому cout << выводит artikul и продолжает вывод уже поля opisanie, пока не встретит там '\0', после этого выводит пробел, дальше - опять opisanie и далее. А вывод постороннего (некого адреса) у ТС происходит из-за этой строчки. Что здесь лишнее?
C++
1
cout<<a[i].artikul<<" "<<cout<<a[i].opisanie<<" "<<a[i].cena<<" "<<a[i].kolvo<<endl;
Добавлено через 4 минуты
Цитата Сообщение от polindroma Посмотреть сообщение
сделала так
C++
1
2
3
4
5
6
7
8
9
10
11
12
in>>n;
  in.ignore(1);
  a=(ob *)calloc(n,sizeof(ob));
  for(i=0;i<n;i++)
  {
    in.getline(a[i].artikul,6);
    in.ignore(1);
    in.getline(a[i].opisanie,15,' ');
    in>>a[i].cena;
    in>>a[i].kolvo;
    in.ignore(1);
  }
Если поля artikul и opisanie состоят из одного слова, то нет смысла усложнять код. in >> будет читать до пробела, т.е. слова.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.09.2012, 05:35
Цитата Сообщение от polindroma Посмотреть сообщение
cout<<"File dlya chteniya otkrit"<<endl;
Ещё нет.

Добавлено через 5 минут
Цитата Сообщение от polindroma Посмотреть сообщение
D0011
А оартикул объявлен 4-х символьным. Каким образом ты надеешься запихать в него и 5 символов артикла, и ещё описание? В него и сам артикул не влезет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.09.2012, 05:35
Помогаю со студенческими работами здесь

Считывание данных из файла
Нужно считать данных из файла для объектов класса. Но обоим объектам присваиваются 4 последних значения из файла. Как сделать что-бы...

Считывание данных из файла
Нужно считать из txt-файла все значение &quot;Angle&quot;, а затем присвоить им значения переменных &quot;a&quot; и &quot;b&quot; так, чтобы в цикле...

Считывание данных из файла
// Laboratornaya_4.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include...

Считывание данных из файла
не могу считать данные из файла На вход программы подаются 365 строк, которые содержат информацию о среднесуточной температуре всех дней...

Считывание данных из файла
Всем здравствуйте... вообщем создан пользовательский класс пассажир class Passenger: public Human { private: string...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru