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

Ошибка в типе переменных

13.08.2015, 01:03. Показов 5001. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста в чем ошибка. Есть задача:"Задать массив структур «ведомость» (сдачи экзамена). Распределить память для элементов массива. Инициализировать 10 элементов массива константной информацией (поля ФИО, номер зачетки). Остальную информацию (дата сдачи, оценка) вводить с клавиатуры (scanf). Вывести массив структур на экран. Освободить память."
Программа переменные number и переменную mark выводит как неизвестное шестизначное число. А если тип переменных изменить на char и изменить %d на %s, то все работает.
И еще, когда int number, программа ругается, что "недопустимая восьмеричная цифра".
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
#include <stdio.h>
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{   
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
    struct list {
    char name[41]; 
    int number[10]; 
    int mark[3]; 
    char data[10];
    }students[10]={{"студент1", 0001},
                    {"студент2", 0002},
                    {"студент3", 0003},
                    {"студент4", 0004},
                    {"студент5", 0005},
                    {"студент6", 0006},
                    {"студент7", 0007},
                    {"студент8", 0008},
                    {"студент9", 0009},
                    {"студент10", 0010}
                    }; 
            for (int i = 0; i < 10; i++)
   {
    printf("\n    Данные студента - %s\n\n", students[i].name);
    printf("Введите дату сдачи экзамена(дд.мм.гг): ");
    scanf("%s", students[i].data);
    printf("Введите отметку, полученную на экзамене: ");
    scanf("%d", students[i].mark);
    }
    printf("\n\n              ВЕДОМОСТЬ сдачи экзамена \n\n №п/п   ФИО студента       № зачетки    Оценка  Дата сдачи экзамена\n");
          for (int i = 0; i < 10; i++)
    printf("\n %-4d  %-16s    %-10d   %2d       %-5s\n", i+1, students[i].name, students[i].number, students[i].mark, students[i].data);
    printf("\n\n");   
          return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.08.2015, 01:03
Ответы с готовыми решениями:

Ошибка в типе данных
недавно начала учиться программировать в си++, не могу понять в чем ошибка: нужно написать...

Ошибка в возвращаемом типе
Помогите пожалуйста, у меня уже волосы дыбом встают. Почему компилятор ругается на это......

Ошибка в типе переменной
Здравствуйте, у меня проблема. Дали задачу, решаю не сразу все, а по кусочкам... первый кусок...

Тривиальная ошибка при типе string
Написал код для сортировки текста в алфавитном порядке. Делал все вроде правильно, как говорится,...

14
шКодер самоучка
2227 / 1921 / 927
Регистрация: 09.10.2013
Сообщений: 4,260
Записей в блоге: 7
13.08.2015, 01:34 2
Цитата Сообщение от khmel08 Посмотреть сообщение
"недопустимая восьмеричная цифра"
считается что числа записанные с нулем в начале являются восьмиричными, в в восьмиричной системе исчисления максимальная цифра это "7".
Уберите из записей чисел начальные нули.
2
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 19
13.08.2015, 10:52  [ТС] 3
Спасибо теперь буду знать! Вот только пока программа не распознает int, она все равно выводит на экран совсем другие цифры. Как это исправить?
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
13.08.2015, 11:08 4
Цитата Сообщение от khmel08 Посмотреть сообщение
C++
1
scanf("%d", students[i].mark);
C++
1
scanf("%d", &students[i].mark);
0
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 19
13.08.2015, 13:50  [ТС] 5
Исправила, все равно выдает ерунду!
Ошибка в типе переменных
0
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,661
13.08.2015, 13:56 6
mark - массив.
C++
1
scanf("%d%d%d", &(students[i].mark[0]), &(students[i].mark[1]), &(students[i].mark[2]));
0
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 19
13.08.2015, 14:07  [ТС] 7
А почему если присвоить mark тип char, и вводить с клавиатуры
C
1
2
3
4
5
printf("Введите отметку, полученную на экзамене: ");
    scanf("%s", &students[i].mark);
   ........
    for (int i = 0; i < 10; i++)
    printf(" %-4d  %-16s    %-10s   %2s       %-5s\n", i+1, &students[i].name, &students[i].number, &students[i].mark, &students[i].data);
то на экран выводит все правильно?
0
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,661
13.08.2015, 14:10 8
Ну может, просто поверх записывает, игнорируя тип. Типы приведи в соответствие.
0
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 19
13.08.2015, 14:18  [ТС] 9
так вот когда в соответствии и не работает.
char name[41];
int number[10];
int mark[3];
char data[10];
или как-то по другому нужно?

А ввод данных по вашему варианту, как организовать, чтобы было понятно какая оценка какому студенту, как-то последовательно хочется. Создала массив структур, разве не индекс [i] должен изменяться?
0
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,661
13.08.2015, 14:35 10
Структура спроектирована так, что у каждого студента три оценки. Учитывай это. Или просто сделай только одну оценку и номер тоже один:
C++
1
2
3
4
char name[41];
int number;
int mark;
char data[10];
0
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 19
13.08.2015, 14:53  [ТС] 11
ошиблась в структуре, мне по одному номеру и оценке на студента было нужно.
Исправила структуру
C++
1
2
3
4
char name[41]; 
    int number; 
    int mark; 
    char data[10];
а она все равно не работает! именно из-за int
0
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,661
13.08.2015, 15:32 12
Актуальный вариант покажи.
0
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 19
13.08.2015, 15:37  [ТС] 13
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
#include <stdio.h>
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{   
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
    struct list {
    char name[41]; 
    int number; 
    int mark; 
    char data[10];
    }students[10]={{"студент1", 111},
                    {"студент2", 222},
                    {"студент3", 333},
                    {"студент4", 444},
                    {"студент5", 555},
                    {"студент6", 666},
                    {"студент7", 777},
                    {"студент8", 888},
                    {"студент9", 999},
                    {"студент10", 100}
                    }; 
            for (int i = 0; i < 10; i++)
   {
    printf("\n    Данные студента - %s\n\n", &students[i].name);
    printf("Введите дату сдачи экзамена(дд.мм.гг): ");
    scanf("%s", &students[i].data);
    printf("Введите отметку, полученную на экзамене: ");
    scanf("%d", &students[i].mark);
    }
    printf("\n\n              ВЕДОМОСТЬ сдачи экзамена \n\n №п/п   ФИО студента       № зачетки    Оценка  Дата сдачи экзамена\n");
          for (int i = 0; i < 10; i++)
          {
    printf("\n %-4d  %-16s    %-10d   %2d       %-5s", i+1, &students[i].name, &students[i].number, &students[i].mark, &students[i].data);
          }
    printf("\n\n");   
          return 0;
}
0
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,661
13.08.2015, 16:34 14
Лучший ответ Сообщение было отмечено khmel08 как решение

Решение

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
#include <stdio.h>
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{   
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
    struct list {
    char name[41]; 
    int number; 
    int mark; 
    char data[10];
    }students[10]={{"студент1", 111},
                    {"студент2", 222},
                    {"студент3", 333},
                    {"студент4", 444},
                    {"студент5", 555},
                    {"студент6", 666},
                    {"студент7", 777},
                    {"студент8", 888},
                    {"студент9", 999},
                    {"студент10", 100}
                    }; 
 
   for (int i = 0; i < 10; i++)
   {
    printf("\n    Данные студента - %s\n\n", students[i].name);
    printf("Введите дату сдачи экзамена(дд.мм.гг): ");
    scanf("%s", students[i].data);
    printf("Введите отметку, полученную на экзамене: ");
    scanf("%d", &students[i].mark);
    }
    printf("\n\n              ВЕДОМОСТЬ сдачи экзамена \n\n №п/п   ФИО студента       № зачетки    Оценка  Дата сдачи экзамена\n");
          for (int i = 0; i < 10; i++)
          {
    printf("\n %-4d  %-16s    %-10d   %2d       %-5s", i+1, students[i].name, students[i].number, students[i].mark, students[i].data);
          }
    printf("\n\n");   
          return 0;
1
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 19
13.08.2015, 16:40  [ТС] 15
Огромное спасибо!!! А то мой первый "блин" уж большим комом вышел!!!!
0
13.08.2015, 16:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.08.2015, 16:40
Помогаю со студенческими работами здесь

ошибка в типе
привет всем. помогите исправить ошибку... не понимаю. на delphi 2010 - не ругается, а на...

Ошибка в типе.
var n,x,i:integer; z:arrayof integer; a,b:file of integer; sr:real; begin assign(a,'путь к...

Ошибка в типе данных
Здравствуйте форумчане! Написал код для курсовой DOMAINS nt,tipe,roof=string PREDICATES...

Ошибка в своем типе данных
Ошибка следующая: Unit3.pas(43): E2029 ';' expected but ' type TNote = record Gorod:...


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

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