Can';变量scanf_s值的t printf ASCII值

Can';变量scanf_s值的t printf ASCII值,c,printf,scanf,C,Printf,Scanf,尝试获取字符的用户输入值,然后将其显示为ASCII整数。它不想这样做——因为我一直得到一个空白输出。但是,如果我手动为指定一个字符字母,让它正常工作 #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

尝试获取字符的用户输入值,然后将其显示为ASCII整数。它不想这样做——因为我一直得到一个空白输出。但是,如果我手动为
指定一个字符字母,让它正常工作

#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;
}
#包括“stdafx.h”
#包括
#定义eps 8.85e-12
int main(){
int x=1,y=2,z;
浮动p=2.5,q=4.8;
双a=2.5e-9,b;
煤焦;
z=2*y;
printf(“x/(y+z)=%.1f\n”,(float)x/(y+z));
printf(“获取字母表”);
scanf_s(“%c”和“let”);
printf(“字母表的ASCII值为%d\n”,let);
printf(“插入b的值:”);
扫描频率(“%lf”、&b);
printf(“每股收益/(a*b)的价值=%8.2e\n”,每股收益/(a*b));
返回0;
}
根据:

scanf
wscanf
不同,
scanf\us
wscanf\us
要求为
c
c
s
s
、或
[]code>中包含的字符串控制集的所有输入参数指定缓冲区大小缓冲区大小(以字符为单位)作为附加参数传递,紧跟在指向缓冲区或变量的指针之后。

因此,您需要的是:

scanf_s("%c", &let, sizeof(let));
虽然,与大多数安全功能一样,如果您知道自己在做什么,它们并不比“不安全”功能更安全


请注意,我没有包括真正不安全的变体,如
gets(str)
scanf(“%s”,str)
,但是那些您知道并控制您将消耗多少输入的变体是可以的。

scanfu s
%c
%s
%[]。添加另一个值为1的参数。请特别注意还需要传递指定长度参数的类型。我使用
scanf_s
的唯一原因是因为VS'13。注意:怀疑您需要
eps/((a-'0')*b)