Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
khmel08
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 19
#1

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

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

Подскажите пожалуйста в чем ошибка. Есть задача:"Задать массив структур «ведомость» (сдачи экзамена). Распределить память для элементов массива. Инициализировать 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2015, 01:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в типе переменных (C++):

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

Ошибка в возвращаемом типе - C++
Помогите пожалуйста, у меня уже волосы дыбом встают. Почему компилятор ругается на это... template&lt;typename _My&gt; iterator...

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

Тривиальная ошибка при типе string - C++
Написал код для сортировки текста в алфавитном порядке. Делал все вроде правильно, как говорится, по книжке, но при компиляции выдает очень...

Ошибка в типе данных 'String' and 'System::String' - C++
Всем привет. помогите, выдает ошибку File1.cpp(40): E2015 Ambiguity between 'String' and 'System::String' ...

Ошибка в записях переменных - C++
Привет, решил попробовать написать проверку по железу, но после компиляции значение &quot;SerialKey&quot; выдает вопросительные знаки. #include...

14
Max Dark
шКодер самоучка
1850 / 1650 / 603
Регистрация: 09.10.2013
Сообщений: 3,678
Записей в блоге: 6
Завершенные тесты: 2
13.08.2015, 01:34 #2
Цитата Сообщение от khmel08 Посмотреть сообщение
"недопустимая восьмеричная цифра"
считается что числа записанные с нулем в начале являются восьмиричными, в в восьмиричной системе исчисления максимальная цифра это "7".
Уберите из записей чисел начальные нули.
1
khmel08
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 19
13.08.2015, 10:52  [ТС] #3
Спасибо теперь буду знать! Вот только пока программа не распознает int, она все равно выводит на экран совсем другие цифры. Как это исправить?
0
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 1
Завершенные тесты: 5
13.08.2015, 11:08 #4
Цитата Сообщение от khmel08 Посмотреть сообщение
C++
1
scanf("%d", students[i].mark);
C++
1
scanf("%d", &students[i].mark);
0
khmel08
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 19
13.08.2015, 13:50  [ТС] #5
Исправила, все равно выдает ерунду!Ошибка в типе переменных
0
nmcf
5533 / 4843 / 1641
Регистрация: 14.04.2014
Сообщений: 19,647
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
khmel08
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
nmcf
5533 / 4843 / 1641
Регистрация: 14.04.2014
Сообщений: 19,647
13.08.2015, 14:10 #8
Ну может, просто поверх записывает, игнорируя тип. Типы приведи в соответствие.
0
khmel08
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
nmcf
5533 / 4843 / 1641
Регистрация: 14.04.2014
Сообщений: 19,647
13.08.2015, 14:35 #10
Структура спроектирована так, что у каждого студента три оценки. Учитывай это. Или просто сделай только одну оценку и номер тоже один:
C++
1
2
3
4
char name[41];
int number;
int mark;
char data[10];
0
khmel08
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
nmcf
5533 / 4843 / 1641
Регистрация: 14.04.2014
Сообщений: 19,647
13.08.2015, 15:32 #12
Актуальный вариант покажи.
0
khmel08
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
nmcf
5533 / 4843 / 1641
Регистрация: 14.04.2014
Сообщений: 19,647
13.08.2015, 16:34 #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
#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
khmel08
0 / 0 / 0
Регистрация: 13.08.2015
Сообщений: 19
13.08.2015, 16:40  [ТС] #15
Огромное спасибо!!! А то мой первый "блин" уж большим комом вышел!!!!
0
13.08.2015, 16:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2015, 16:40
Привет! Вот еще темы с ответами:

Ошибка инициализации переменных - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; double f(double x) { return ...

Ошибка использования неиницилизированных переменных - C++
const int D_petrol = 100; double D, petrol, petrol_D; double Cost_petrol_1,Cost_petrol_2,Cost_petrol_3; double Price1, Price2,...

В чем ошибка?) Имена переменных - C++
Я только учусь) Програмка перепечатаная с книги, но в визуал студио 2008 я ловлю ошибку) #include &lt;stdio.h&gt; #include &lt;iosteram&gt; ...

Информация о типе - C++
Есть ли в сях возможность прочитать класс объекта в строку, заканчивающуюся нулём? Известно, что базовый класс имеет виртуальные члены. Не...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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