Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
1

Вывод данных из структуры

26.09.2013, 23:47. Показов 2605. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброй ночи
Возникла проблема вывода данных из структуры. То бишь совсем ничего не выводится,программа просто зависает и все.
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
#pragma hdrstop
#pragma argsused
 
#include <stdio.h>
#include <stdlib.h >
#include <conio.h>
#include <string>
using namespace std;
 
int n=0,p,i; 
FILE *buo;
 
struct kontract
{
   string fam[100];
   string name[100];
   string ot[100];
   int money[100];
};
kontract dan;
 
void Vvod()
{
buo=fopen("input.txt","r");
fscanf(buo,"%d",&p);
while(fscanf(buo,"%s %s %s %d",&dan.fam[n],&dan.name[n],&dan.ot[n])!=EOF)
 {
    n++;
 }
}
 
void Min()
{
 
}
 
void Zap()
{
 
}
 
void Out()       //выводим
{
for(i=0;i<n;i++);
 printf("%s %s %s %d",dan.fam[i],dan.name[i],dan.ot[i]);
}
 
int main()
{
Vvod();
Min();
Zap();
Out();
getch();
return 0;
}
Входные данные:
HTML5
1
2
3
4
5
6
7
8
7
Kozlov Ivan Aleksandrovich 1000
Neznajkin Nikolaj Sergeevich 2000
Neponjatkin Sergej Ivanovich 1500
Kozlov Ivan Aleksandrovich 12000
Neznajkin Nikolaj Sergeevich 23000
Neponjatkin Sergej Ivanovich 15400
Abramov Evgenij Jurevich 5050
Помогите
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2013, 23:47
Ответы с готовыми решениями:

Вывод данных из структуры
Как сделать чтобы выводились данные заданного дня пользователем из структуры?

Ввод и вывод данных из структуры
Здравствуйте Есть структура: struct Flight { std::string arrival; unsigned numjfl; ...

Понятие структуры данных. Элементарные структуры данных. Простые структуры данных
Понятие структуры данных. Элементарные структуры данных. Простые структуры данных: методы...

Структуры (данные о студентах) - вывод данных в файл
Здравствуйте, у меня проблема с выводом данных в файл. При проверке нет ни каких замечаний, однако...

22
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
27.09.2013, 00:29 2
Ты тут пропустил четвертый параметр:
C++
1
 printf("%s %s %s %d",dan.fam[i],dan.name[i],dan.ot[i]);
Попробуй так printf("%s %s %s %d",dan.fam[i],dan.name[i],dan.ot[i],dan.money[i]);

Добавлено через 38 секунд
Да и другие функции проверь ты и в остальных забыл добавить четвертый параметр!!!

Добавлено через 1 минуту
Тут где четвертый параметр fscanf(buo,"%s %s %s %d",&dan.fam[n],&dan.name[n],&dan.ot[n]) ???
1
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
27.09.2013, 00:33  [ТС] 3
ой
но все равно не выводит
выводит только <nill> <nill> <nill> 0
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.09.2013, 01:04 4
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
64
65
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
int n = 0, i; 
FILE *buo = NULL;
 
struct kontract
{
    char fam[100];
    char name[100];
    char ot[100];
    int money;
};
 
kontract *dan;
 
int Vvod()
{
    buo = fopen("input.txt","r");
    if (buo == NULL) 
    {
        printf("Error buo!\n");
        getchar();
        return 0;
    }
    
    fscanf(buo,"%d", &n);
    dan = (kontract*)malloc(n * sizeof(kontract));
    
    for (i = 0; i < n; ++i)
    {
        fscanf(buo,"%s%s%s%d", &dan[i].fam, &dan[i].name, &dan[i].ot, &dan[i].money);
    }
    return 1;
}
 
void Min()
{
 
}
 
void Zap()
{
 
}
 
void Out()       //выводим
{
    for(i = 0; i < n; i++)
        printf("%s %s %s %d\n", dan[i].fam, dan[i].name, dan[i].ot, dan[i].money);
}
 
int main()
{
    if (!Vvod()) return 0;
    Min();
    Zap();
    Out();
 
    free(dan);
 
    getch();
    return 0;
}
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
27.09.2013, 01:43 5
Наконецто у меня заработало, компилятор по 10 минут код компилирует
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
#pragma hdrstop
#pragma argsused
 
#include <stdio.h>
#include <stdlib.h >
#include <conio.h>
#include <string>
#include <cstdlib>
#include <iostream>
using namespace std;
 
int n=0,p,i; 
FILE *buo;
 
struct kontract
{
   char fam[100][100];
   char name[100][100];
   char ot[100][100];
   int money[100];
};
kontract dan;
 
void Vvod()
{
buo=fopen("input.txt","r");
fscanf(buo,"%d",&p);
while(fscanf(buo,"%s %s %s %d",&dan.fam[n],&dan.name[n],&dan.ot[n],&dan.money[n])!=EOF)
 {
    //cout <<dan.fam[n]<<' '<<dan.name[n]<<' '<<dan.ot[n]<<' '<<dan.money[n]<<endl;
    //exit(1);
    n++;
 }
}
 
void Min()
{
 
}
 
void Zap()
{
 
}
 
void Out()       //выводим
{
    cout <<"mu tyt"<<endl;
for(i=1;i<n;i++)
 printf("%s %s %s %d \n",dan.fam[i],dan.name[i],dan.ot[i],dan.money[i]);
 
}
 
int main()
{
Vvod();
Min();
Zap();
Out();
getch();
return 0;
}
1
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
27.09.2013, 11:57  [ТС] 6
ninja2, alsav22, да,все работает.
Но Вы не смогли бы объяснить,что не так в моем коде?
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
27.09.2013, 12:32 7
Gdasar, Да куча ошибок, я еле разобрался, у меня компилятор почему то по 5 минут минимум компилирует простенькие программы.

1).От здесь почему точка с запятой стоит сразу после цикла?
C++
1
2
3
4
5
void Out()       //выводим
{
for(i=0;i<n;i++);
 printf("%s %s %s %d",dan.fam[i],dan.name[i],dan.ot[i]);
}
2)Эти функции fscanf() и printf() не принимают тип string.

Я не рад был что взялся разбирать код .

Добавлено через 1 минуту
Возможно printf принимает, тести, я с эти функции если честно не использую использую <iostream> или <fstream>

Добавлено через 5 минут
От просто тест у меня уже вылетает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <cstdio>
#include <string>
using std::string;
 
int main()
{
    string s;
    scanf("%s",&s);
    printf("%s",s);
 
    return 0;
}
Такое впечатление, что эту программку не ты писал.
1
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
27.09.2013, 15:38  [ТС] 8
теперь все норм
больше не буду ночью кодить

Добавлено через 3 часа 1 минуту
ninja2, вопросик,почему
C++
1
2
3
   char fam[100][100];
   char name[100][100];
   char ot[100][100]
а не
C++
1
2
3
   string fam[100];
   string name[100];
   string ot[100];
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
27.09.2013, 16:06 9
Цитата Сообщение от Gdasar Посмотреть сообщение
вопросик,почему
у меня не работает со string функция fscanf()

не работает - вылетает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cstdio>
#include <string>
using std::string;
 
int main()
{
    string s;
    char str[30];
    printf("enter str ... ");
    scanf("%s",&s);
    printf("%s",s);
 
    return 0;
}
А так работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cstdio>
#include <string>
using std::string;
 
int main()
{
    string s;
    char str[30];
    printf("enter str ... ");
    scanf("%s",&str);
    printf("%s",str);
 
    return 0;
}
"s%" соответствует только Си строке (char*).
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
27.09.2013, 16:14 10
Gdasar, не слушай никого, кроме alsav22.
тебе нужен массив структур, а не структура, содержащая массивы! А ниндзя делает всё наоборот.
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
27.09.2013, 16:20 11
Kuzia domovenok, Да ладно, у меня мой вариант работает, а что автору нада что бы работал, мой вариант более похож на тот который был изначально у автора .

Добавлено через 3 минуты
Kuzia domovenok, Понабижало тут советчиков... .
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
03.10.2013, 23:23  [ТС] 12
Вот решил переделать свой код+добавил к нему цикл,который не работает.
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
#pragma hdrstop
#pragma argsused
 
#include <stdio.h>
#include <stdlib.h >
#include <conio.h>
#include <string>
using namespace std;
 
struct kontract
{
   char fam[100];
   char name[100];
   char ot[100];
   int money;
};
 
void main()
{
int n=0,p,i,j; string output[100];
FILE *buo;
 
buo=fopen("input.txt","r");
fscanf(buo,"%d",&p);
kontract *dan=new kontract[p];
while(fscanf(buo,"%s %s %s %d",&dan[n].fam,&dan[n].name,&dan[n].ot,&dan[n].money)!=EOF)
 {
    n++;
 }
 
for(i=0;i<n;i++)
{
 if(i+1<n)
 {
 for(j=i+1;j<n;j++)
 {
  if((dan[i].fam==dan[j].fam)&&(dan[i].name==dan[j].name)&&(dan[i].ot==dan[j].ot))
   {
    dan[i].money+=dan[j].money; dan[j].money=0;
   }
 }
 }
 
}
for(i=0;i<n;i++)
printf("%s %s %s %d\n",dan[i].fam,dan[i].name,dan[i].ot,dan[i].money);
free(dan);
getch();
}
HTML5
1
2
3
4
5
6
7
8
9
8
Kozlov Ivan Aleksandrovich 1000
Neznajkin Nikolaj Sergeevich 2000
Neponjatkin Sergej Ivanovich 1500
Kozlov Ivan Aleksandrovich 12000
Neznajkin Nikolaj Sergeevich 23000
Neponjatkin Sergej Ivanovich 15000
Neznajkin Nikolaj Sergeevich 1000
Abramov Evgenij Jurevich 5050
Суть цыкла: нужно найти общую стоимость заказов,которые оформил данный человек(один человек мог совершить несколько заказов) и оставить одну строку с суммой всех его заказов.
например,после первого прохода цикла будет:
HTML5
1
2
3
4
5
6
7
8
Kozlov Ivan Aleksandrovich 13000
Neznajkin Nikolaj Sergeevich 2000
Neponjatkin Sergej Ivanovich 1500
Kozlov Ivan Aleksandrovich 0
Neznajkin Nikolaj Sergeevich 23000
Neponjatkin Sergej Ivanovich 15000
Neznajkin Nikolaj Sergeevich 1000
Abramov Evgenij Jurevich 5050
Скажите,почему цикл не выполняется?
0
Croessmah
03.10.2013, 23:28
  #13

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Gdasar, не слушай никого, кроме alsav22.
то есть "не слушай ninja2" получается? :D

0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
04.10.2013, 00:32 14
Вот это зачем сделано?
Цитата Сообщение от Gdasar Посмотреть сообщение
n++;
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
04.10.2013, 00:38  [ТС] 15
alsav22, а вдруг нас обманули?! То есть дали список больше(меньше) заявленного?
Проверку не писал... Суть моего вопроса в другом.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
04.10.2013, 00:45 16
Цитата Сообщение от Gdasar Посмотреть сообщение
Суть моего вопроса в другом.
А суть моего - в том же. Если в начале файла пишется количество структур в файле, и под это количество выделяется память, то какой смысл что-то считать? Я понимаю, если бы такой записи в файле не было, то сначала шёл бы подсчёт структур, потом выделение памяти под них. А так - бессмысленность.
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
04.10.2013, 11:01  [ТС] 17
Так лучше?
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
#pragma hdrstop
#pragma argsused
 
#include <stdio.h>
#include <stdlib.h >
#include <conio.h>
#include <string>
using namespace std;
 
struct kontract
{
   char fam[100];
   char name[100];
   char ot[100];
   int money;
};
 
void main()
{
int n=0,p,i,j; string output[100];
FILE *buo;
 
buo=fopen("input.txt","r");
fscanf(buo,"%d",&p);
kontract *dan=new kontract[p];
for(i=0;i<p;i++)
{
 fscanf(buo,"%s %s %s %d",&dan[i].fam,&dan[i].name,&dan[i].ot,&dan[i].money);
}
 
for(i=0;i<p;i++)
{
 if(i+1<p)
 {
 for(j=i+1;j<p;j++)
 {
  if((dan[i].fam==dan[j].fam)&&(dan[i].name==dan[j].name)&&(dan[i].ot==dan[j].ot))
   {
    dan[i].money+=dan[j].money; dan[j].money=0;
   }
 }
 }
}
for(i=0;i<p;i++)
printf("%s %s %s %d\n",dan[i].fam,dan[i].name,dan[i].ot,dan[i].money);
free(dan);
getch();
}
Вопрос все еще открыт. Помогите разобраться с циклом.
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
04.10.2013, 21:00  [ТС] 18
Сделал маленькую проверку циклов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for(i=0;i<p-1;i++)
{
if(i+1<p)
{
printf("YES1\n");
 for(j=i+1;j<p;j++)
 {     printf("YES2\n");
  if((dan[i].fam==dan[j].fam)&&(dan[i].name==dan[j].name)&&(dan[i].ot==dan[j].ot))
   {
    printf("YES3\n");
    dan[i].money+=dan[j].money; dan[j].money=0;
   }
 }
}
}
И получилось так,что у меня ниразу не выполняется условие
Входные данные:
HTML5
1
2
3
4
5
4
Kozlov Ivan Aleksandrovich 1000
Kozlov Ivan Aleksandrovich 12000
Kozlov Ivan Aleksandrovich 2000
Kozlov Ivan Aleksandrovich 3000
Данные на выходе:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
YES1
YES2
YES2
YES2
YES1
YES2
YES2
YES1
YES2
Kozlov Ivan Aleksandrovich 1000
Kozlov Ivan Aleksandrovich 12000
Kozlov Ivan Aleksandrovich 2000
Kozlov Ivan Aleksandrovich 3000
Скажите,почему такое происходит.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
04.10.2013, 21:28 19
Цитата Сообщение от Gdasar Посмотреть сообщение
Скажите,почему такое происходит.
Строки С так не сравниваются. Для этого есть функция: strcmp().
1
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
04.10.2013, 21:40  [ТС] 20
alsav22, спасибо огромное
0
04.10.2013, 21:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2013, 21:40
Помогаю со студенческими работами здесь

Вывод данных структуры (оставление символа '\n' в потоке ввода)
for (int i = 0; i &lt; 8; i++) { cout &lt;&lt; &quot;Введите фамилию и имя&quot; &lt;&lt; endl; getline(cin,...

Вывод в цикле структуры (структура имеет много полей данных)
Приветствую ))) Подскажите пожалуйста, как бы вы решили данную проблему. Имеется структура...

Ввод структуры в текстовый файл столбиком и вывод данных из файла в структуру
Имеется база данных в виде структуры, которая будет постепенно дописываться приблизительно до 1000...

Ошибка при освобождении памяти (block type is valid) и неправильный вывод структуры данных
Доброго времени суток. У меня есть класс вектор для реализации длинной арифметики. Возникли...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru