Структура Студент: Вместо кириллицы выводятся кракозябры - C (СИ)
Формулировка задачи:
Программа работает, но когда нужно выводить (не)успевающих, то выводятся непонятные символы, что не так?
#include<stdio.h>
#include<locale.h>
#include <conio.h>
struct student {
int numz;
char surname[30], name[30], otchestvo[30];
int shifr;
int mark;
};
int main ()
{
int N, kurs; char group[30], fakul[30];
setlocale(LC_ALL, "");
printf("\n Факультет: "); scanf( "%s", &fakul);
printf(" Группа: "); scanf( "%s", &group);
printf(" Курс: "); scanf( "%d", &kurs);
printf(" сколько человек в группе?");
scanf("%d", &N);
struct student stud[30]; int i;
for (i=0; i<N; i++)
{ printf("%d-й студент", i+1);
printf("\n Номер зачетки: "); scanf( "%d", &stud[i].numz);
printf("\n Ф.И.О : "); scanf( "%s %s %s", &stud[i].surname, &stud[i].name, &stud[i].otchestvo);
printf("\n Шифр предмета: "); scanf( "%d", &stud[i].shifr);
printf("\n Оценка: \n"); scanf( "%d", &stud[i].mark);
}
for (i=0; i<N; i++) {
if((stud[i].mark)<3)
printf("%s %s %s Не успевает по %d\n ", stud[i].surname, stud[i].name, stud[i].otchestvo, stud[i].shifr );
else
{
if((stud[i].mark)>=3)
printf("%s %s %s Успевает по %d\n", stud[i].surname, stud[i].name, stud[i].otchestvo, stud[i].shifr );
}
}
}Решение задачи: «Структура Студент: Вместо кириллицы выводятся кракозябры»
textual
Листинг программы
#include<stdio.h>
#include<locale.h>
#include <conio.h>
struct student {
int numz;
char surname[30], name[30], otchestvo[30];
int shifr;
int mark;
};
int main (void)
{
int N, kurs; char group[30], fakul[30];
setlocale(LC_ALL, "");
printf("\n Факультет: "); scanf( "%s", fakul);
printf(" Группа: "); scanf( "%s", group);
printf(" Курс: "); scanf( "%d", &kurs);
printf(" сколько человек в группе?");
scanf("%d", &N);
struct student stud[30]; int i;
for (i=0; i<N; i++)
{ printf("%d-й студент", i+1);
printf("\n Номер зачетки: "); scanf( "%d", &stud[i].numz);
printf("\n Ф.И.О : "); scanf( "%s %s %s", stud[i].surname, stud[i].name, stud[i].otchestvo);
printf("\n Шифр предмета: "); scanf( "%d", &stud[i].shifr);
printf("\n Оценка: \n"); scanf( "%d", &stud[i].mark);
}
for (i=0; i<N; i++) {
if((stud[i].mark)<3)
printf("%s %s %s Не успевает по %d\n ", stud[i].surname, stud[i].name, stud[i].otchestvo, stud[i].shifr );
else
{
if((stud[i].mark)>=3)
printf("%s %s %s Успевает по %d\n", stud[i].surname, stud[i].name, stud[i].otchestvo, stud[i].shifr );
}
}
return(0);}
Объяснение кода листинга программы
- Представлен код на языке C, который предназначен для ввода и вывода информации о студентах.
- В начале кода определяются переменные и структура данных
студент. Структурастудентсодержит поля: номер зачетной книжки, ФИО, шифр предмета и оценка. - Затем в функции main() определяется количество студентов в группе и происходит инициализация переменных факультета, группы и курса.
- Далее происходит цикл, в котором происходит ввод информации о каждом студенте: его номере зачетной книжки, ФИО, шифре предмета и оценке.
- После ввода информации о всех студентах происходит вывод информации о тех студентах, которые получают оценку меньше 3 и 3 и выше.
- Код использует функции scanf() и printf() для ввода и вывода информации.
- В конце функции main() возвращается значение 0, что означает успешный конец работы программы.