使用scanf()获取多个值

41

我正在使用scanf()从用户那里获取一组int。但是,我希望用户一次性提供所有4个ints而不是4个不同的提示。我知道可以通过以下方式获取一个值:

scanf( "%i", &minx);

但我希望用户能够像这样做某事:

Enter Four Ints: 123 234 345 456

这个能做到吗?


1
%d 将输入转换为十进制表示。 %i 将输入转换为十进制、十六进制或八进制字符串,使用通常的前导 0、0x、0X 来引导到八进制或十六进制。例如:"010" 的转换结果不同。 - chux - Reinstate Monica
8个回答

69

你可以通过一次调用实现这个目的,就像这样:

scanf( "%i %i %i %i", &minx, &maxx, &miny, &maxy);

你可以使用%d %i %o %x %X来表示整数类型。有关更多信息,请查看此链接:http://montcs.bloomu.edu/~bobmon/Information/LowLevel-Programming/printf-formatting.shtml - Josh Curren
%d 几乎和 %i 完全相同。在大多数情况下,它们的作用是一样的。 - Chris Lutz
@Chris:在什么情况下,%i不能像%d一样正常工作? - Jonathan Leffler
8
根据我的scanf手册,"%i" 会读取以0x开头的int类型数值并将其看作16进制,如果以0开头则看作8进制,否则按十进制读取。而 "%d" 总是按照十进制进行读取。Open Group的手册与我的相同。 - Chris Lutz
@wrang-wrang:是的,应该没问题。通常情况下,如果您使用%d,除非您希望输入非十进制数字数据。 - Reed Copsey

10
是的。
int minx, miny, maxx,maxy;
do {
   printf("enter four integers: ");
} while (scanf("%d %d %d %d", &minx, &miny, &maxx, &maxy)!=4);

这个循环只是为了演示scanf返回成功读取的字段数(或EOF)。


1
那段代码唯一的问题是,如果用户只输入了一个值,那么他们在下一个周期必须重新输入所有4个值。 - Jonathan Leffler
1
如果我输入无效数据(例如字符),这将变成一个无限循环。 - Spikatrix

7
int a,b,c,d;
if(scanf("%d %d %d %d",&a,&b,&c,&d) == 4) {
   //read the 4 integers
} else {
   puts("Error. Please supply 4 integers");
}

4

补充一点,我们也可以使用数组:

int i, array[4];
printf("Enter Four Ints: ");
for(i=0; i<4; i++) {
    scanf("%d", &array[i]);
}

1
这个问题很旧了,但如果有人能用现实生活的例子来帮助解答就好了。
对于单输入数据 -
int number;
printf("Please enter number : ");
scanf("%d", &number);

对于一行中的多个输入数据 -

int number1, number2;
printf("Please enter numbers one by one : ");
scanf("%d %d", &number1, &number2);
  • %d %d 是十进制格式。您可以根据数据类型使用适当的格式,并在其中使用空格
  • &number1, &number2 - 在变量名称之间使用逗号

如果需要更多实际示例,请查看此实用示例 - https://devsenv.com/tutorials/how-to-take-input-and-output-in-c-programming

希望这能帮助某些人。


1

可以这样做,但用户必须使用空格分隔数字:

#include "stdio.h"

int main()
{
    int minx, x, y, z;

    printf("Enter four ints: ");
    scanf( "%i %i %i %i", &minx, &x, &y, &z);

    printf("You wrote: %i %i %i %i", minx, x, y, z);
}

“用户必须用空格分隔数字”并非如此。用户输入可以是“12-34+56-78”。 - chux - Reinstate Monica

-1

使用scanf()获取多个值是可行的

int r,m,v,i,e,k;

scanf("%d%d%d%d%d%d",&r,&m,&v,&i,&e,&k);

-2
int a[1000] ;
for(int i = 0 ; i <= 3 , i++)
scanf("%d" , &a[i]) ;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接