Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Greedus
0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 5
1

Scanf_s и printf

20.10.2017, 11:03. Просмотров 988. Ответов 5
Метки нет (Все метки)

Доброго времени суток. Я плохо знаю этот язык и у меня вечные проблемы с этими операторами. Вот мой код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main()
{
    
    char n1[5];
    int a;
    char f;
 
    printf("1. Enter: last name, team code, score, place > ");
    scanf_s("%3s %d %c \n", n1, 5, &a, &f);
    printf("%s %d %c \n", n1, a, f);
 
    return 0;
}
(На строку "1. Enter: last name, team code, score, place > " не обращайте внимания)
Я пытаюсь понять, как работает это всё : зачем ставить "5" после "n1", как правильно ввести символ (у меня вечно выбивает непонятный иероглиф), почему число не хочет вводится. Помогите, пожалуйста.

Scanf_s и printf
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2017, 11:03
Ответы с готовыми решениями:

Отличие scanf от scanf_s
Скажите, пожалуйста, чем отличается функция scanf() от scanf_s()? У меня Visual Studio, и при...

Проверка возвращаемого значения scanf_s
Здравствуйте. Помогите пожалуйста сделать проверку возвращаемого значения scanf_s в программке: ...

Функция scanf_s не работает нормально с массивом
Во время работы с массивами обнаружил, что не работает, казалось бы корректная программа. В итоге,...

Ввод данных, использование функций scanf_s и спецификатора %g
1. В качестве вводимого символа используйте первую букву своей фамилии (латинского алфавита). В...

Ошибка: error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead.
подскажите плиз в чем проблема? #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; int...

5
MansMI
1451 / 1160 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
20.10.2017, 11:27 2
Цитата Сообщение от Greedus Посмотреть сообщение
scanf_s("%3s %d %c \n", n1, 5, &a, &f);
???
0
Greedus
0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 5
20.10.2017, 11:30  [ТС] 3
Цитата Сообщение от MansMI Посмотреть сообщение
???
Насчет "5" после "n1" уже понял, насчет остального - пока ещё нет.
0
COKPOWEHEU
1263 / 908 / 210
Регистрация: 09.09.2017
Сообщений: 3,834
20.10.2017, 14:02 4
Лучший ответ Сообщение было отмечено Greedus как решение

Решение

Исправил scanf_s
Остальное: %3s означает считать не более 3 символов (все остальные идут в следующие параметры).
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main()
{
    
    char n1[5];
    int a;
    char f;
 
    printf("1. Enter: last name, team code, score, place > ");
    scanf("%3s%d %c", n1, &a, &f);
    printf("%s %d %c \n", n1, a, f);
 
    return 0;
}
Так оно работает
$ gcc main.c -Wall
$ ./a.out
1. Enter: last name, team code, score, place > abc 2 d
abc 2 d
0
Greedus
0 / 0 / 0
Регистрация: 10.10.2017
Сообщений: 5
20.10.2017, 15:15  [ТС] 5
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Остальное: %3s означает считать не более 3 символов (все остальные идут в следующие параметры).
То есть из-за того, что я ввожу вместо 3-х символов 4+ у меня и не работает программа? Это можно исправить при нескольких функциях scanf ?
0
COKPOWEHEU
1263 / 908 / 210
Регистрация: 09.09.2017
Сообщений: 3,834
20.10.2017, 15:49 6
Я бы просто взял буфер строки с запасом. Он нужен-то только на время считывания. Ну и с последним char'ом неоднозначно: если после int'а нет пробела, или, наоборот, несколько - будет считано не то что надо. Можно попробовать считывать снова строку.
Например, вот так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>
 
void scan_sic(char* str, int str_size, int *i, char *ch){
  char buffer[1024];
  scanf("%1024s%i", buffer, i);
  strncpy(str, buffer, str_size);
  str[str_size-1]=0; //strncpy может не добавлять завершающий нуль
  scanf("%1024s",buffer);
  *ch = buffer[0];
}
 
int main(){
  char n1[5];
  int a;
  char f;
 
  printf("1. Enter: last name, team code, score, place > ");
  scan_sic(n1, 4, &a, &f);
  printf("%s %d %c \n", n1, a, f);
 
  return 0;
}
0
20.10.2017, 15:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2017, 15:49

Функция printf()
Когда делаешь ошибку в функции printf() , показывает что в файле stdio.h вот так выглядит создание...

насчет printf
вот у меня есть слова, мне надо вывести слова меньше определенной длинны, и больше определенной...

Не работает printf()
Почему консоль ничего не выводит, в чём проблема? Microsoft Visual C++ Express 2010 #include...


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

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

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