C 为什么我的printf无法获取我的用户输入?

C 为什么我的printf无法获取我的用户输入?,c,C,我有这个 void main(int argnum, char** input) { int a=0, b=0, c=0, d=0, e=0, f=0, g=0, h=0, i=0, j=0, k=0, l=0, m=0, n=0, o=0, p=0; printf("Enter the numbers from 1 to 16, in any order(separate by comma) : "); scanf_s("%d" &

我有这个

void main(int argnum, char** input)
{
   int a=0, b=0, c=0, d=0, e=0, f=0, g=0, h=0, i=0, j=0, k=0, l=0, m=0, n=0, o=0, p=0;

   printf("Enter the numbers from 1 to 16, in any order(separate by comma) : ");

   scanf_s("%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d", &a, &b, &c, &d, &e, &f, &g, &h, &i, &j, &k, &l, &m, &n, &o, &p);
   printf("%d " "%d " "%d " "%d \n", a, b, c, d);
   printf("%d " "%d " "%d " "%d \n", e, f, g, h);
   printf("%d " "%d " "%d " "%d \n", i, j, k, l);
   printf("%d " "%d " "%d " "%d \n", m, n, o, p); 
  
} 
我的显示器是

a 0 0 0
0 0 0 0 
0 0 0 0
0 0 0 0
由于某些原因,我的变量(a除外)没有被捕获。。怎么了

(以逗号分隔)

如果使用逗号分隔数字,第二次和后续扫描将失败,因为无法将逗号转换为整数

扫描
%d
整数将:

  • 跳过空白(不包括逗号);然后
  • 根据需要扫描任意多个字符以填充整数,直到第一个字符不是整数的一部分
如果第一个非空白字符是逗号,则不适用于整数。最简单的解决方案可能只是告诉用户用空格而不是逗号分隔


让我们从显示相同行为的精简版本开始(使用单个字符串而不是那些完全不同的字符串):

这将:

  • %d
    -跳过可选空格并读取整数
  • :跳过逗号前的空格
  • :跳过逗号
  • %d
    -跳过可选空格并读取整数

当然,不言而喻,如果失败会对您产生负面影响,您应该始终检查可能失败的事情:

if (scanf("%d %d", &a, &b) != 2) { // expect two things scanned
    fprintf(stderr, "Something went horribly wrong!\n");
    exit(1);
}
(以逗号分隔)

如果使用逗号分隔数字,第二次和后续扫描将失败,因为无法将逗号转换为整数

扫描
%d
整数将:

  • 跳过空白(不包括逗号);然后
  • 根据需要扫描任意多个字符以填充整数,直到第一个字符不是整数的一部分
如果第一个非空白字符是逗号,则不适用于整数。最简单的解决方案可能只是告诉用户用空格而不是逗号分隔


让我们从显示相同行为的精简版本开始(使用单个字符串而不是那些完全不同的字符串):

这将:

  • %d
    -跳过可选空格并读取整数
  • :跳过逗号前的空格
  • :跳过逗号
  • %d
    -跳过可选空格并读取整数

当然,不言而喻,如果失败会对您产生负面影响,您应该始终检查可能失败的事情:

if (scanf("%d %d", &a, &b) != 2) { // expect two things scanned
    fprintf(stderr, "Something went horribly wrong!\n");
    exit(1);
}
#包括
void main(int argnum,char**input)
{
int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;
printf(“输入1到16之间的数字,任意顺序(用逗号分隔):”;
scanf(“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“d”“a”“b”“c”“d”“e”“f”“g”“h”“i”“j”“k”“l”“m”“n”“o”“p”);
printf(“%d”“%d”“%d”“%d\n”,a、b、c、d);
printf(“%d”“%d”“%d”“%d\n”,e,f,g,h);
printf(“%d”“%d”“%d”“%d\n”,i,j,k,l);
printf(“%d”“%d”“%d”“%d\n”,m,n,o,p);
} 
从键盘获取每个值后,请按enter键,它将使用此代码 void main(int argnum,char**input) { int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0; printf(“输入1到16之间的数字,任意顺序(用逗号分隔):”; scanf(“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“%d”“d”“a”“b”“c”“d”“e”“f”“g”“h”“i”“j”“k”“l”“m”“n”“o”“p”); printf(“%d”“%d”“%d”“%d\n”,a、b、c、d); printf(“%d”“%d”“%d”“%d\n”,e,f,g,h); printf(“%d”“%d”“%d”“%d\n”,i,j,k,l); printf(“%d”“%d”“%d”“%d\n”,m,n,o,p); }
从键盘上取下每个值后,请按enter键,它将使用此代码

顺便说一句,您之所以要编写
%d”“%d”“%d\n”
而不是等效的、更可读的
%d%d%d\n”
?即使您请求
的引号已更正(用逗号分隔):“
将失败,除非您在格式字符串中包含实际的
,“
分隔符。除非您是在独立环境(没有任何操作系统)中编程,在符合标准的实现中,
main
的允许声明为
int main(void)
int main(int argc,char*argv[])
(您将看到它是用等效的
char**argv
编写的)。请参见:。另请参见:首选方法是将整行用户输入读取到缓冲区(字符数组)中,然后使用
strtol()
(或至少
sscanf()
)解析数组中的整数值。这样,用户用什么来分隔数字并不重要,您只需选择整数值,然后验证所有16个值是否已输入。
“1dog2cats 3跳蚤4青蛙5鸟6青蛙7或8,9,10老鼠?11吹笛手12鼓手13 14 16”的输入
可以很好地工作…使用16-
int
数组比16个独立的整数变量更有意义。顺便说一句,您编写
%d“%d”%d“%d\n”
而不是等效的、可读性更高的
%d%d%d\n”
的任何原因,即使使用正确的引号,您对
的请求(用逗号分隔):“
将失败,除非您在格式字符串中包含实际的
,“
分隔符。除非您是在独立环境(没有任何操作系统)中编程,在符合标准的实现中,
main
的允许声明为
int main(void)
int main(int argc,char*argv[])
(您将看到它是用等效的
char**argv
编写的)。请参见:。另请参见:首选方法是将用户输入的整行内容读取到缓冲区(字符数组)中,然后从
if (scanf("%d %d", &a, &b) != 2) { // expect two things scanned
    fprintf(stderr, "Something went horribly wrong!\n");
    exit(1);
}
#include<stdio.h>
void main(int argnum, char** input)
{
   int a=0, b=0, c=0, d=0, e=0, f=0, g=0, h=0, i=0, j=0, k=0, l=0, m=0, n=0, o=0, p=0;

   printf("Enter the numbers from 1 to 16, in any order(separate by comma) : ");

   scanf("%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d", &a, &b, &c, &d, &e, &f, &g, &h, &i, &j, &k, &l, &m, &n, &o, &p);
   printf("%d " "%d " "%d " "%d \n", a, b, c, d);
   printf("%d " "%d " "%d " "%d \n", e, f, g, h);
   printf("%d " "%d " "%d " "%d \n", i, j, k, l);
   printf("%d " "%d " "%d " "%d \n", m, n, o, p); 
  
}