尝试获取字符的用户输入值,然后将其显示为ASCII整数。它不想这样做 - 因为我一直得到一个空白的输出。但是,如果我手动为let
分配一个字母,那么它可以正常工作。
#include "stdafx.h"
#include <stdio.h>
#define eps 8.85e-12
int main() {
int x = 1, y = 2, z;
float p = 2.5, q = 4.8;
double a = 2.5e-9, b;
char let;
z = 2 * y;
printf(" x/(y+z) = %.1f \n", (float)x/(y + z));
printf(" Get an alphabet ");
scanf_s("%c", &let);
printf("ASCII value of the alphabet is %d\n", let);
printf("Insert value of b :");
scanf_s("%lf", &b);
printf("value of eps/(a*b)= %8.2e\n", eps / (a*b));
return 0;
}
答案 0 :(得分:1)
与
scanf
和wscanf
不同,scanf_s
和wscanf_s
需要为所有{{1}类型的输入参数指定缓冲区大小} {},c
,C
,s
或S
中包含的字符串控件集。 字符的缓冲区大小在指向缓冲区或变量的指针后立即作为附加参数传递。
所以你需要的是:
[]
但是,与大多数这些安全功能一样,它们并不比不安全的功能更安全。如果你知道你正在做什么,那就是那些。
请注意,我不包括真正不安全的变体,例如scanf_s("%c", &let, sizeof(let));
或gets(str)
,但知道并控制 输入你消耗的就好了。