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);
}