Как использовать scanf в visual studio
Возвращаемое значение
1-3) Количество успешно назначенных принимающих аргументов (которое может быть нулевым в случае, если сбой сопоставления произошел до того, как был назначен первый получающий аргумент), или EOF, если сбой ввода произошел до того, как был назначен первый получающий аргумент.
Вы игнорируете это возвращаемое значение.
. чтобы узнать, было ли сканирование успешным. Не делать это плохая идея и стоит того предупреждения, которое вы получили.
Слишком много здесь, чтобы добавить комментарий.
Я использую версию Visual C, но она никогда не жалуется на то, что возвращаемое значение из scanf не используется. Что он делает, это жалуется, что scanf небезопасно и не рекомендуется, когда это не так.
MS думает, что я должен использовать свою собственную "более безопасную" версию scanf_s , которая даже сложнее в использовании, и IMO вовсе не безопаснее — потому что это не простая замена, а принимает другие аргументы, и поэтому легко делать ошибки в его использовании.
Функция scanf() не работает
Здравствуйте, помогите решить проблему с функцией scanf(); Она не принимает значения в переменные вообще. Работаю в Visual Studio 2017. Пробовал по советам очищать поток и присваивать переменным значение int, не помогает.
Ошибка в данном месте
Функция scanf не работает
Возникает проблема, что функция scanf не работает. Скрин: Можно как-нить решить? И не будут ли.
Не определяется функция scanf
Привет!) У меня такая проблема. не хочет считывать строки(( уже все перепробовал. вот.
Функция scanf(), не считывает данные
Вот перед вами кусок кода, это функция которая возвращает true или false bool ask(char *text)
Решение
Решение
Но при этом делаете вывод, что scanf не работает?
У всех работает, а у Вас не работает.
Очевидно же, что дело не в scanf.
Найдите ошибку в коде:
Функция ввода с клавиатуры scanf
Здравствуйте. WinXP, MS VS20005 В приведенном коде BBB независимо от введенного с клавиатуры.
Чтение вещественного числа, функция scanf
Здравствуйте! Только начал знакомство с этим замечательным языком. Возникла такая проблема.
Функция scanf + проверка на ввод данных
Как я понимаю: использовать scanf + массив для проверки на корректность ввода — неудачная идея. Она.
Почему не работает scanf в visual studio
MS VC2005, WinXP
В приведенном коде при вводе на первый запрос нечислового значения, например буквы, не выполняется последующий запрос scanf ввода значения BBB. В чем проблема?
Заранее благодарю за ответ!
unsigned short AAA, BBB;
int c;//промежут. переменная для ввода значений
void main()
setlocale(LC_CTYPE, "rus");
если не число ввести, то в c ничего не будет присвоено и останется предыдущее значение (скорее всего 0 в данном случае, ибо глобальная переменная).
(второе вроде не определено стандартом и может работать не везде)
MS VC2005, WinXP |
Он не портится, просто в нем остается та буква (если пытались прочитать число).
Считывает отформатированные данные из стандартного входного потока. Доступны более безопасные версии этих функций; см. раздел scanf_s , _scanf_s_l wscanf_s ,, _wscanf_s_l .
в Visual Studio 2015 printf функция и scanf семейство функций были объявлены как inline и перемещены в заголовки и . При переносе старого кода вы можете увидеть ошибку LNK2019 в подключении к этим функциям. Дополнительные сведения см. в статье Visual C++ журнал изменений 2003-2015.
Синтаксис
Параметры
format
Строка управления форматированием.
argument
Необязательные аргументы.
locale
Используемый языковой стандарт.
Возвращаемое значение
Возвращает количество успешно преобразованных и назначенных полей. Возвращаемое значение не включает поля, которые были прочитаны, но не были назначены. Возвращаемое значение 0 указывает, что поля не были назначены.
Если format является указателем NULL , вызывается обработчик недопустимых параметров (см. раздел Проверка параметров). Если продолжение выполнения разрешено, эти функции возвращают EOF и устанавливают для errno значение EINVAL .
Дополнительные сведения об этих и других кодах ошибок см _doserrno . в статьях, errno _sys_errlist , и _sys_nerr .
Remarks
Функция scanf считывает данные из стандартного входного потока stdin и записывает данные в расположение, указанное параметром argument . Каждый параметр argument должен быть указателем на переменную, которая имеет тип, соответствующий спецификатору типа в параметре format . Если копирование производится между перекрывающимися строками, поведение не определено.
При чтении строки с параметром scanf всегда указывайте ширину %s формата (например, " %32s " вместо " %s "); в противном случае входные данные неправильного формата могут легко вызвать переполнение буфера. Кроме того, рекомендуется использовать scanf_s , _scanf_s_l , wscanf_s _wscanf_s_l или fgets .
wscanf — это версия scanf с расширенными символами; аргумент format для wscanf — строка расширенных символов. wscanf и scanf ведут себя одинаково, если поток открыт в режиме ANSI. scanf сейчас не поддерживает ввод из потока ЮНИКОДА.
Версии этих функций с суффиксом _l идентичны за исключением того, что они используют переданный параметр языкового стандарта вместо языкового стандарта текущего потока.
Универсальное текстовое сопоставление функций
TCHAR.H ассемблер | _UNICODE & _MBCS не определено | _MBCS определяется | _UNICODE определяется |
---|---|---|---|
_tscanf | scanf | scanf | wscanf |
_tscanf_l | _scanf_l | _scanf_l | _wscanf_l |
Требования
Подпрограмма | Обязательный заголовок |
---|---|
scanf , * *_scanf_l ** | |
wscanf , _wscanf_l | либо |
консоль не поддерживается в приложениях универсальная платформа Windows (UWP). Стандартные дескрипторы потока, связанные с консолью, stdin stdout , и stderr , должны быть перенаправлены до того, как функции времени выполнения C смогут использовать их в приложениях UWP. Дополнительные сведения о совместимости см. в статье Compatibility.
Reads formatted data from the standard input stream. More secure versions of these function are available; see scanf_s , _scanf_s_l , wscanf_s , _wscanf_s_l .
In Visual Studio 2015 The printf and scanf family of functions were declared as inline and moved to the and headers. If you are migrating older code you might see LNK2019 in connection with these functions. For more information, see Visual C++ change history 2003 - 2015.
Syntax
Parameters
format
Format control string.
argument
Optional arguments.
locale
The locale to use.
Return Value
Returns the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. A return value of 0 indicates that no fields were assigned.
If format is a NULL pointer, the invalid parameter handler is invoked, as described in Parameter Validation. If execution is allowed to continue, these functions return EOF and set errno to EINVAL .
For information on these and other error codes, see _doserrno , errno , _sys_errlist , and _sys_nerr .
Remarks
The scanf function reads data from the standard input stream stdin and writes the data into the location given by argument . Each argument must be a pointer to a variable of a type that corresponds to a type specifier in format . If copying takes place between strings that overlap, the behavior is undefined.
When reading a string with scanf , always specify a width for the %s format (for example, " %32s " instead of " %s "); otherwise, improperly formatted input can easily cause a buffer overrun. Alternately, consider using scanf_s , _scanf_s_l , wscanf_s , _wscanf_s_l or fgets .
wscanf is a wide-character version of scanf ; the format argument to wscanf is a wide-character string. wscanf and scanf behave identically if the stream is opened in ANSI mode. scanf doesn't currently support input from a UNICODE stream.
The versions of these functions with the _l suffix are identical except that they use the locale parameter passed in instead of the current thread locale.
Generic-Text Routine Mappings
TCHAR.H routine | _UNICODE & _MBCS not defined | _MBCS defined | _UNICODE defined |
---|---|---|---|
_tscanf | scanf | scanf | wscanf |
_tscanf_l | _scanf_l | _scanf_l | _wscanf_l |
Requirements
Routine | Required header |
---|---|
scanf , * *_scanf_l ** | |
wscanf , _wscanf_l | or |
The console is not supported in Universal Windows Platform (UWP) apps. The standard stream handles that are associated with the console, stdin , stdout , and stderr , must be redirected before C run-time functions can use them in UWP apps. For additional compatibility information, see Compatibility.
Reads formatted data from the standard input stream. These versions of scanf , _scanf_l , wscanf , _wscanf_l have security enhancements, as described in Security Features in the CRT.
Syntax
Parameters
format
Format control string.
argument
Optional arguments.
locale
The locale to use.
Return Value
Returns the number of fields successfully converted and assigned. The return value doesn't include fields that were read but not assigned. A return value of 0 indicates no fields were assigned. The return value is EOF for an error, or if the end-of-file character or the end-of-string character is found in the first attempt to read a character. If format is a NULL pointer, the invalid parameter handler is invoked, as described in Parameter Validation. If execution is allowed to continue, scanf_s and wscanf_s return EOF and set errno to EINVAL .
For information about these and other error codes, see errno , _doserrno , _sys_errlist , and _sys_nerr .
Remarks
The scanf_s function reads data from the standard input stream, stdin , and writes it into argument . Each argument must be a pointer to a variable type that corresponds to the type specifier in format . If copying occurs between strings that overlap, the behavior is undefined.
wscanf_s is a wide-character version of scanf_s ; the format argument to wscanf_s is a wide-character string. wscanf_s and scanf_s behave identically if the stream is opened in ANSI mode. scanf_s doesn't currently support input from a UNICODE stream.
The versions of these functions that have the _l suffix are identical, except they use the locale parameter instead of the current thread locale.
Unlike scanf and wscanf , scanf_s and wscanf_s require you to specify buffer sizes for some parameters. Specify the sizes for all c , C , s , S , or string control set [] parameters. The buffer size in characters is passed as an additional parameter. It immediately follows the pointer to the buffer or variable. For example, if you're reading a string, the buffer size for that string is passed as follows:
The buffer size includes the terminal null. You can use a width specification field to ensure the token that's read in fits into the buffer. When a token is too large to fit, nothing is written to the buffer unless there's a width specification.
The size parameter is of type unsigned , not size_t . Use a static cast to convert a size_t value to unsigned for 64-bit build configurations.
The buffer size parameter describes the maximum number of characters, not bytes. In this example, the width of the buffer type doesn't match the width of the format specifier.
The S format specifier means use the character width that's "opposite" the default width supported by the function. The character width is single byte, but the function supports double-byte characters. This example reads in a string of up to nine single-byte-wide characters and puts them in a double-byte-wide character buffer. The characters are treated as single-byte values; the first two characters are stored in ws[0] , the second two are stored in ws[1] , and so on.
This example reads a single character:
When multiple characters for non-null-terminated strings are read, integers are used for both the width specification and the buffer size.
Generic-Text Routine Mappings
TCHAR.H routine | _UNICODE & _MBCS not defined | _MBCS defined | _UNICODE defined |
---|---|---|---|
_tscanf_s | scanf_s | scanf_s | wscanf_s |
_tscanf_s_l | _scanf_s_l | _scanf_s_l | _wscanf_s_l |
Requirements
Routine | Required header |
---|---|
scanf_s , _scanf_s_l | |
wscanf_s , _wscanf_s_l | or |
The console isn't supported in Universal Windows Platform (UWP) apps. The standard stream handles stdin , stdout , and stderr must be redirected before C run-time functions can use them in UWP apps. For additional compatibility information, see Compatibility.
Считывает отформатированные данные из стандартного входного потока. Доступны более безопасные версии этих функций; см. раздел scanf_s ,, _scanf_s_l wscanf_s , _wscanf_s_l .
в Visual Studio 2015 printf функция и scanf семейство функций были объявлены как inline и перемещены в заголовки и. При переносе старого кода вы можете увидеть ошибку LNK2019 в подключении к этим функциям. Дополнительные сведения см. в статье Visual C++ журнал изменений 2003-2015.
Синтаксис
Параметры
format
Строка управления форматированием.
argument
Необязательные аргументы.
locale
Используемый языковой стандарт.
Возвращаемое значение
Возвращает количество успешно преобразованных и назначенных полей. Возвращаемое значение не включает поля, которые были прочитаны, но не были назначены. Возвращаемое значение 0 указывает, что поля не были назначены.
Если format является NULL указателем, вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если выполнение может быть продолжено, эти функции возвращают EOF и устанавливают errno для значение EINVAL .
Дополнительные сведения об этих и других кодах ошибок см. в статьях _doserrno ,, errno _sys_errlist и _sys_nerr .
Remarks
scanf Функция считывает данные из стандартного входного потока stdin и записывает данные в расположение, заданное параметром argument . Каждый argument должен быть указателем на переменную типа, которая соответствует спецификатору типа в format . Если копирование производится между перекрывающимися строками, поведение не определено.
При чтении строки с параметром scanf всегда указывайте ширину %s формата (например, " %32s " вместо " %s "); в противном случае входные данные неправильного формата могут легко вызвать переполнение буфера. Кроме того, рекомендуется использовать scanf_s , _scanf_s_l wscanf_s _wscanf_s_l , или fgets .
wscanf — Это версия с расширенными символами scanf ; format аргумент для wscanf — строка расширенных символов. wscanf и scanf ведут себя одинаково, если поток открыт в режиме ANSI. scanf в настоящее время не поддерживает входные данные из потока Юникода.
Версии этих функций с _l суффиксом идентичны за исключением того, что они используют переданный параметр языкового стандарта вместо языкового стандарта текущего потока.
Универсальное текстовое сопоставление функций
TCHAR.H ассемблер | _UNICODE & _MBCS не определено | _MBCS определяется | _UNICODE определяется |
---|---|---|---|
_tscanf | scanf | scanf | wscanf |
_tscanf_l | _scanf_l | _scanf_l | _wscanf_l |
Требования
Подпрограмма | Обязательный заголовок |
---|---|
scanf , * *_scanf_l ** | |
wscanf , _wscanf_l | либо |
консоль не поддерживается в приложениях универсальная платформа Windows (UWP). Стандартные дескрипторы потока, связанные с консолью,, stdin stdout и stderr , должны быть перенаправлены до того, как функции времени выполнения C смогут использовать их в приложениях UWP. Дополнительные сведения о совместимости см. в статье Compatibility.
Как завтавить работать scanf() в VS2012
MSVS 2012 не хочет работать с базовой сишной функцией scanf(), нужно писать scanf_s(). Проект консольный, пустой. Как заставить её работать?
Вам нужно сделать вот что ( работает в Visual Studio 2012, думаю, сработает и в более ранних)
- Пункт меню View => Other Windows => Property Manager
- В появившемся окне кликаете правой кнопкой по проекту, выбираете пункт Properties
- Configuration Properties => C/C++ => Preprocessor => Preprocessor Definitions
- Кликаете Edit в выпадающем списке
- Добавляете в появившемся окошке строку _CRT_SECURE_NO_WARNINGS
- Сохраняете, закрываете. Должно работать
** Как найти Property Manager**
Вариант 2. На русской VS может не сработать В правом верхнем углу есть поле для поиска:
Куда тыкать дальше
Как использовать функцию scanf в visual studio?
Когда компилирую, visual studio показывает ошибку:
‘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.
Когда компилирую через командную строку, все хорошо
Вы уверены что это ошибка, а не предупреждение (warning)? Я вот нет.
Как вы компилируете через командную строку? Возможно там или другой компилятор, или другое окружение, или другие настройки компиляции, или просто варнинги не показываются.
Использовать так как написано в вариннге — другую функцию scanf_s, или отключить варнинги секурности, или забить (но понимать чем это черевато).
Нет, не предупреждение, а ошибка
Компилирую в командной строке компилятором mingw
gcc main.c => a.exe
Попробовал scanf_s, компилируется, только уже с предупреждением, мол, что передано недостаточно аргументов для строки формата
Читайте также: