Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226

Компилир. но не работают 2 scanf подрят

07.10.2011, 21:11. Показов 7035. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть кода: есть две структуры студент. Заполнение с клавиатуры. Нужно отсортировать по имени от А до Я. Но с вводом проблема. Первый студент заполняеться без проблем, а второй без фамилии(Прізвище).

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
66
67
68
69
70
71
72
73
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <locale.h>
#define M 2
struct ST
 {
    char name[100];
    char lastname[20];
    int year;
    int num;
    double mark;
}ST[M],temp;
int main()
{
    setlocale(LC_ALL,"Rus");
      for(int i=0; i<M; i++)
        {
            printf("Студент №%d:\n",  i+1);
                printf("\tПрiзвище студента\n");//от сюда
                scanf("%s",&ST[i].lastname);//до сюда пролетает на втором шаге цыкла
                printf("\tiм'я студента\n");
                scanf("%s",&ST[i].name);
                printf("\tрiк народження студента:\n");
                scanf("%d",&ST[i].year);
                printf("\tНомер групи:\n");
                scanf("%d",&ST[i].num);
                printf("\tСереднiй бал успiшностi:\n");
                scanf("%lf",&ST[i].mark);   
        }
 
       for(int i=0; i<M; i++)
        {
            printf("Студент №%d:\n",  i+1);
                printf("\tПрiзвище та iм'я студента: %s %s. ",ST[i].lastname,ST[i].name);
                printf("Рiк народження студента:%d\n",ST[i].year);
                printf("\tНомер групи:%d. ",ST[i].num);
                printf("Середнiй бал успiшностi:%2.1lf\n",ST[i].mark);
        }
       
       int count=0;
        for(int i=0; i<M; i++)
        {
            if(ST[i].mark<6){
            printf("Студент з балом <6:\n");
                printf("\tПрiзвище та iм'я студента: %s %s. ",ST[i].lastname,ST[i].name);
                printf("Рiк народження студента:%d.\n",ST[i].year);
                printf("\tНомер групи:%d. ",ST[i].num);
                printf("Середнiй бал успiшностi:%2.1lf\n",ST[i].mark);
                count++;}
        }
        if(count==0) printf("Таких студентiв немає!");
        printf("\n\nВiдсортований список по iм'ях:\n");
        for(int i=0; i<M-1;i++)
        {
            if(strcmp(ST[i].name,ST[i+1].name)==1)
            {
                temp=ST[i+1];
        ST[i+1]=ST[i];
        ST[i]=temp;
            }
        }
        //Отсорт. структура
        for(int i=0; i<M; i++)
        {
            printf("Студент №%d:\n",  i+1);
                printf("\tПрiзвище та iм'я студента: %s %s. ",ST[i].lastname,ST[i].name);
                printf("Рiк народження студента:%d\n",ST[i].year);
                printf("\tНомер групи:%d. ",ST[i].num);
                printf("Середнiй бал успiшностi:%2.1lf\n",ST[i].mark);
        }
      return 0;
}
Вот такое предупреждение выкинул Visual Studio 2010:"Предупреждение 1 warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\documents and settings\администратор.tabulorasa\мои документы\visual studio 2010\projects\struct_sort_name!\struct_s ort_name!\struct_sort_name!.cpp 21
"
Препод 15 минут думал и говорит, что не знает.
Если написать 1 сканф для фамилии и имени, то его на втором шаге цыкла просто не будет(даже имя не смогу заполнить, потому разбил на 2 сканф)

В нете на этот варнинг нашёл:
"Ну так это же варнинги просто Ошибок-то нету. Вместо scanf напиши scanf_s (по моему там не требуется доп. аргументов)"
C
1
2
float e=0;
scanf_s("%f",&e);
но я ставлю _s и при первом же вводе завершается программа. Помогите пожалуйста.

Добавлено через 8 минут
C
1
2
3
4
5
6
printf("\tрiк народження студента:\n");
                scanf("%d",&ST[i].year);
                printf("\tНомер групи:\n");
                scanf("%d",&ST[i].num);
                printf("\tСереднiй бал успiшностi:\n");
                scanf("%lf",&ST[i].mark);
если удалить этот ввод, то работает... в чём же проблема...???
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.10.2011, 21:11
Ответы с готовыми решениями:

Scanf(),getchar() не работают в функции
Здравствуйте по какой причине scanf(),getchar() программа не видит внутри какой то функции не scanf(), не getchar() просто пролетает...

RecyclerView создается несколько раз подрят
Суть проблемы: Есть TabbedActivity ней 6 вкладок в каждой фрагмент со своим RecyclerView Если перейти на 6 вкладку а затем вернуться...

Замена стоящих подрят пробелов на один пробел
Доброй ночи. Начал изучать Си по книге Б.Керриган Д.Ритчи столкнулся с задачей: &quot;Напишите программу, копирующую символы ввода в...

29
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
08.10.2011, 19:15  [ТС]
Студворк — интернет-сервис помощи студентам
alkagolik, Дружище! Ты наставил на истинный путь!
Я нашёл тему(вродь об которой ты говорил) и вот:
прописывешь библиотеку <windows.h>, в мэйне пишешь: SetConsoleCP(1251); SetConsoleOutputCP(1251);
потом в свойствах командной строки выбери шрифт Lucida Console. должно помочь
Сделал как написано и заработало!!!. Я скоро с этой кирицей стану . Тебе респект! =) Вот скрин консоли:
Миниатюры
Компилир. но не работают 2 scanf подрят  
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
08.10.2011, 19:22
а если еще прикрутить Windows PowerShell, то виндовс может быть вполне даже привлекательной. успехов
0
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
08.10.2011, 19:40  [ТС]
alkagolik, Спасибо! И тебе успехов!!!
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
09.10.2011, 12:10
посмотрел твои скрины
а ты попробуй ввести 10,0
потому что он явно у тебя точку частью вещественного числа не считает
по вопросу со второго скрина: имя массива всегда преобразуется в адрес его первого элемента
1
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
09.10.2011, 15:00  [ТС]
вы были правы, но они работают по разному, локале и на первом скрине две функ. с параметром (1251)
Миниатюры
Компилир. но не работают 2 scanf подрят   Компилир. но не работают 2 scanf подрят   Компилир. но не работают 2 scanf подрят  

0
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
09.10.2011, 15:29  [ТС]
что касается ввода кириллицы, то setlocale() не работает(первый скрин), а на втором и ввод и вывод кириллицы. Для setlocale() замена шрифта не помогла, а вариант на втором скрине требует замену шрифта(там показано).
Миниатюры
Компилир. но не работают 2 scanf подрят   Компилир. но не работают 2 scanf подрят  
0
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
09.10.2011, 16:14  [ТС]
со scanf() разобрались, а вот gets() пролетает, а следующий gets() работает. Не поможете? На скринах поподробнее.
Миниатюры
Компилир. но не работают 2 scanf подрят   Компилир. но не работают 2 scanf подрят  
0
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
09.10.2011, 16:18  [ТС]
вот код двох задач: первая и вторая(портировка по номеру телефона)
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
66
67
68
69
70
71
72
73
74
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
//#include <locale.h>
#include <windows.h>
#define M 1
#define ctel 5
struct st
 {  char name[100], lastname[100];
    int year, num;
    double mark;
}ST[M],temp;
struct teld{
    char name[40],inicialu[10],adress[100],tel_number[30];
}TELDOV[ctel],temp1;
    int count=0;
int main()
{     //setlocale(LC_ALL,"Rus");
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
      for(int i=0; i<M; i++)
        {   printf("Студент №%d:\n",  i+1);
                printf("\tПрiзвище та iм'я студента:\n");
                //fflush(stdin); //щоб на другому кроці циклу можна було ввести прізище та ім'я
                scanf("%s %s",&ST[i].lastname,&ST[i].name);
                printf("\tрiк народження студента:\n");
                scanf("%d",&ST[i].year);
                printf("\tНомер групи:\n");
                scanf("%d",&ST[i].num);
                printf("\tСереднiй бал успiшностi:\n");
                scanf("%lf",&ST[i].mark);         }
       for(int i=0; i<M; i++)
        {   printf("Студент №%d:\n\tПрiзвище та iм'я студента: %s %s.\n\tРiк народження студента:%d\n\tНомер групи:%d.\n\tСереднiй бал успiшностi:%2.1lf\n",i+1,ST[i].lastname,ST[i].name,ST[i].year,ST[i].num,ST[i].mark);      }
        for(int i=0; i<M; i++)
            if(ST[i].mark<6){
            printf("Студент з балом <6. Його номер %d:\n\tПрiзвище та iм'я студента: %s %s.\n\tРiк народження студента:%d\n\tНомер групи:%d.\n\tСереднiй бал успiшностi:%2.1lf\n",i+1,ST[i].lastname,ST[i].name,ST[i].year,ST[i].num,ST[i].mark);
                count++;}
        if(count==0) printf("\nCтудентiв з середнiм балом < 6 немає!");
        printf("\n\nВiдсортований список по прiзвищах:\n");
        for(int k=0; k<M-1;k++)
        for(int i=0; i<M-1;i++)
            if(strcmp(ST[i].lastname,ST[i+1].lastname)==1)  {
                temp=ST[i+1];
                ST[i+1]=ST[i];
                ST[i]=temp;      }
        for(int i=0; i<M; i++)
        {       printf("Студент №%d:\n\tПрiзвище та iм'я студента: %s %s.\n\tРiк народження студента:%d\n\tНомер групи:%d.\n\tСереднiй бал успiшностi:%2.1lf\n",i+1,ST[i].lastname,ST[i].name,ST[i].year,ST[i].num,ST[i].mark);    }
 
//Второе задание
 
        printf("Завдання 2:\n");
        for(int i=0;i<ctel;i++)
        {printf("Запис №%d:\n\tВведiть прiзвище та iнiцiали:\n",i+1);
        //fflush(stdin);//щоб на першому кроці циклу можна було ввести прізище та ім'я
        scanf("%s %s",TELDOV[i].name,TELDOV[i].inicialu);
        //gets(TELDOV[i].name);
        printf("\tВведiть адресу:\n");
        gets(TELDOV[i].adress);
        printf("\tВведiть номер телефону:\n");
        gets(TELDOV[i].tel_number);     }
        for(int i=0;i<ctel;i++)
        printf("Запис №%d:\n\tПрiзвище та iнiцiали: %s\n\tАдреса: %s\n\tНомер телефону: %s\n",i+1,TELDOV[i].name,TELDOV[i].adress,TELDOV[i].tel_number);
        for(int l=0;l<ctel-1;l++)
            for(int g=0;g<ctel-1;g++)
                if(strcmp(TELDOV[g].tel_number,TELDOV[g+1].tel_number)==1){
                    temp1=TELDOV[g+1];
                    TELDOV[g+1]=TELDOV[g];
                    TELDOV[g]=temp1;}
        printf("Вiдсортований список за номерами телефонiв:\n");
        for(int i=0;i<ctel;i++)
        printf("Запис №%d:\n\tПрiзвище та iнiцiали: %s\n\tАдреса: %s\n\tНомер телефону: %s\n",i+1,TELDOV[i].name,TELDOV[i].adress,TELDOV[i].tel_number);
        //якщо таких записів немає, то вивести відповідне повідомлення?????????
      return 0;
}
Проблема и собственно gets() во второй задании
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
10.10.2011, 02:10
gets() замени на fgets(), так как в fgets() есть ограничение на количество вводимых символов
fgets() не удаляет перевод строки, вместе с fgets() можно использовать sscanf()

устранить пролёт gets() можно так:
Цитата Сообщение от CVB
C
1
scanf("%s %s",TELDOV[i].name,TELDOV[i].inicialu);
C
1
scanf("%s %s%*c",TELDOV[i].name,TELDOV[i].inicialu);
на этих скринах, пролёт происходит из-за того, что по первой %s пошла .3, во вторую %s идёт первое слово, а второе слово идёт на следующие scanf'ы
1
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
10.10.2011, 18:33  [ТС]
Спасибо! Работает! Огромное Вам спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.10.2011, 18:33

Как отсортировать БД по сумме 85 идущих подрят полей?
Здравствуйте. Схема подключения: TADOConnection-&gt;TADOQuery. У меня есть БД длинной в 85 полей, формат названий которых следующий:...

Дано предложение. Найти наибольшее количество идущих подрят пробелов
Дано предложение. Найти наибольшее количество идущих подрят пробелов. помоте плиз

надумал брать 1066МНz, но тут вспомнил, что не вся подрят оперативка процу подходит.
Извыняйте. мож тупой вопрос. просто искал и ничо конкретного не нашол. Вот решил добавить оперативку уже било надумал брать 1066МНz ...

СМА LG WD-80480S не работают исполнительные механизмы, не работают клапана ,мотор,насос
Стиралка LG WD-80480S по включении программы блокирует люк и стоит .Воду не набирает,барабан не крутится,щелкают реле реверса. При...

Материнка AsRock N68C-GS FX - не работают слоты DDR3 2 шт, DDR2 работают нормально
Здравствуйте, Материнка AsRock N68C-GS FX - не работают слоты DDR3 2 шт, хотя предусмотрены. DDR2 работают нормально Процессор TripleCore...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru