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

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

Восстановить пароль Регистрация
 
 
Gdasar
184 / 45 / 9
Регистрация: 18.02.2013
Сообщений: 417
Записей в блоге: 9
26.09.2013, 23:47     Вывод данных из структуры #1
Доброй ночи
Возникла проблема вывода данных из структуры. То бишь совсем ничего не выводится,программа просто зависает и все.
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
Помогите
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2013, 23:47     Вывод данных из структуры
Посмотрите здесь:

Структуры. Вызов данных структуры по указателю. с++ C++
C++ Вывод в цикле структуры (структура имеет много полей данных)
C++ Ввод структуры в текстовый файл столбиком и вывод данных из файла в структуру
C++ ООП.Разработать структуру элементов данных класса в виде динамической структуры данных
C++ Понятие структуры данных. Элементарные структуры данных. Простые структуры данных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
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]) ???
Gdasar
184 / 45 / 9
Регистрация: 18.02.2013
Сообщений: 417
Записей в блоге: 9
27.09.2013, 00:33  [ТС]     Вывод данных из структуры #3
ой
но все равно не выводит
выводит только <nill> <nill> <nill> 0
alsav22
5282 / 4801 / 442
Регистрация: 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;
}
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
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;
}
Gdasar
184 / 45 / 9
Регистрация: 18.02.2013
Сообщений: 417
Записей в блоге: 9
27.09.2013, 11:57  [ТС]     Вывод данных из структуры #6
ninja2, alsav22, да,все работает.
Но Вы не смогли бы объяснить,что не так в моем коде?
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
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;
}
Такое впечатление, что эту программку не ты писал.
Gdasar
184 / 45 / 9
Регистрация: 18.02.2013
Сообщений: 417
Записей в блоге: 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];
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
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*).
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
27.09.2013, 16:14     Вывод данных из структуры #10
Gdasar, не слушай никого, кроме alsav22.
тебе нужен массив структур, а не структура, содержащая массивы! А ниндзя делает всё наоборот.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.09.2013, 16:20     Вывод данных из структуры #11
Kuzia domovenok, Да ладно, у меня мой вариант работает, а что автору нада что бы работал, мой вариант более похож на тот который был изначально у автора .

Добавлено через 3 минуты
Kuzia domovenok, Понабижало тут советчиков... .
Gdasar
184 / 45 / 9
Регистрация: 18.02.2013
Сообщений: 417
Записей в блоге: 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
Скажите,почему цикл не выполняется?
Croessmah
03.10.2013, 23:28
  #13

Не по теме:

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

alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.10.2013, 00:32     Вывод данных из структуры #14
Вот это зачем сделано?
Цитата Сообщение от Gdasar Посмотреть сообщение
n++;
Gdasar
184 / 45 / 9
Регистрация: 18.02.2013
Сообщений: 417
Записей в блоге: 9
04.10.2013, 00:38  [ТС]     Вывод данных из структуры #15
alsav22, а вдруг нас обманули?! То есть дали список больше(меньше) заявленного?
Проверку не писал... Суть моего вопроса в другом.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.10.2013, 00:45     Вывод данных из структуры #16
Цитата Сообщение от Gdasar Посмотреть сообщение
Суть моего вопроса в другом.
А суть моего - в том же. Если в начале файла пишется количество структур в файле, и под это количество выделяется память, то какой смысл что-то считать? Я понимаю, если бы такой записи в файле не было, то сначала шёл бы подсчёт структур, потом выделение памяти под них. А так - бессмысленность.
Gdasar
184 / 45 / 9
Регистрация: 18.02.2013
Сообщений: 417
Записей в блоге: 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();
}
Вопрос все еще открыт. Помогите разобраться с циклом.
Gdasar
184 / 45 / 9
Регистрация: 18.02.2013
Сообщений: 417
Записей в блоге: 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
Скажите,почему такое происходит.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.10.2013, 21:28     Вывод данных из структуры #19
Цитата Сообщение от Gdasar Посмотреть сообщение
Скажите,почему такое происходит.
Строки С так не сравниваются. Для этого есть функция: strcmp().
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2013, 21:40     Вывод данных из структуры
Еще ссылки по теме:

Структуры (данные о студентах) - вывод данных в файл C++
C++ Структуры данных "Книги", вывод нужной информации
Вывод структуры, строка как элемент структуры C++

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

Или воспользуйтесь поиском по форуму:
Gdasar
184 / 45 / 9
Регистрация: 18.02.2013
Сообщений: 417
Записей в блоге: 9
04.10.2013, 21:40  [ТС]     Вывод данных из структуры #20
alsav22, спасибо огромное
Yandex
Объявления
04.10.2013, 21:40     Вывод данных из структуры
Ответ Создать тему
Опции темы

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