gpt4 book ai didi

c - 水平循环scanf

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:33 25 4
gpt4 key购买 nike

如果我使用这段代码:

int a, b[100];
scanf("%d", &a);
for (int x = 0; x < a; x++) {
scanf(" %d", &b[x]);
}

例如如果

第一个输入:3
第二个输入:4
第三个输入:3
第 4 个输入:1

屏幕上的输出将是这样的(因为我在每个循环的 scanf 末尾都使用了 enter)

3
4
3
1

我想制作一个代码,它将水平循环 for 循环中的第二个 scanf 而无需按 enter(但使用空格)直到循环结束,例如这个:

scanf(" %d %d %d", &b[x], &b[x+1], &b[x+2]);

最佳答案

您可以在一行中输入计数和条目,用空格分隔,当前代码将在一个不间断的流中解析它们,因为 scanf()跳过 %d 值之前的任何空格,无论是空格、制表符、换行符...

请注意格式 " %d"是多余的:%d跳过整数前的任何未决空格,格式字符串中的空格表示完全相同的东西。只需使用 scanf("%d", &b[x]);

另请注意,您应该添加安全检查以避免扫描超出数组末尾的值,并且您应该测试 scanf() 的返回值。避免无效输入的未定义行为。

修改后的版本:

#include <stdio.h>

int main() {
int a, x, b[100];
if (scanf("%d", &a) == 1) {
for (x = 0; x < 100 && x < a; x++) {
if (scanf("%d", &b[x]) != 1)
break;
}
printf("read %d values:", x);
for (int i = 0; i < x; i++)
printf(" %d", b[i]);
printf("\n");
}
return 0;
}

关于c - 水平循环scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52790051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com