如果我使用以下代码:
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]);
发布于 2018-10-13 15:10:36
scanf
函数将读取并忽略在下一个非空格字符之前遇到的任何空格字符(空格字符包括空格、换行符和制表符)。格式字符串中的单个空格可验证从流中提取的任意数量的空格字符(包括无)。
因此,在这种情况下,是否使用ENTER (换行符)或空格(单个或多个)对读取输入值没有影响。
有关scanf
如何工作的更多详细信息,请参阅此适用于scanf
的在线reference。
发布于 2018-10-13 15:12:53
您可以在一行中输入计数和条目,并用空格分隔,当前代码将在单个不间断的流中解析它们,因为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;
}
https://stackoverflow.com/questions/52790051
复制相似问题