gpt4 book ai didi

c - 使用 scanf 读取空格分隔的数字并将它们存储在数组中 - C

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:43 27 4
gpt4 key购买 nike

我正在尝试使用 scanf() 获取包含一堆以空格分隔的 1-3 位数字的用户输入,并将它们存储到一个 int 数组中,并在新行上打印每个单独的数字以进行测试,但它不起作用。这是我目前所拥有的:

#include <stdio.h>
#include <string.h>

int main()
{
int sourceArr[500];
int i = 0;

printf("\nEnter ciphertext: \n");
while (scanf("%d", &sourceArr[i++]) == 1);
for (int j=0;j<500;j++) {
printf("%d\n", sourceArr[j]);
}
}

因此要求用户输入如下数字序列:

Enter ciphertext: 
23 122 32

我想在 sourceArr[0] 中存储 23,在 sourceArr[1] 中存储 122,在 sourceArr[2] 中存储 32,然后像这样打印每一个:

23
122
32

但程序在输入后立即空闲,不会打印数字。

最佳答案

"%d" 占用前导空格,例如 ' ''\n',而不仅仅是 ' '.

所以当用户输入“123 456 789”Enter时,scanf()会再次被调用等待更多的输入。它将继续等待,直到输入的非数字数据、stdin 关闭或很少遇到 IO 错误。

因为 stdin 通常是缓冲的,stdinscanf() 看不到来自一行的任何输入直到按下 Enter

while (scanf("%d", &sourceArr[i++]) == 1);

如果代码需要使用 Enter 结束输入,请使用 fgets() 读取。然后使用 sscanf()strtol() 解析它。下面用"%n"记录扫描到的char个数。

char buf[100];
printf("\nEnter ciphertext: \n");
if (fgets(buf, sizeof buf, stdin) == NULL)
Handle_EOF();

char *p = buf;
int n;
while (sscanf(p, "%d%n", &sourceArr[i], &n) == 1) {
i++;
p += n;
}

for (int j = 0; j < i; j++) {
printf("%d\n", sourceArr[j]);
}

关于c - 使用 scanf 读取空格分隔的数字并将它们存储在数组中 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26283343/

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