gpt4 book ai didi

c - 如何修复随机数的无限打印?

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

我编写了一个程序,将未知数量的整数扫描到一个数组中,但是当我运行它时,它会打印出它已无限次获得的最后一个值。

例如输入:1 2 3 4 5

输出将是 5555555555555555555555...

为什么会发生这种情况,我该如何解决?

我的目标是为实例 {1, 2, 3, 4, 5} 创建一个数组,然后将它扫描的内容打印到数组中,仅一次...

int *pSet = (int*) malloc(sizeof(int)); int i; int c;
printf("Please enter a stream of numbers to make a set out of them: ");
printf("\n");

scanf("%d", &c);
pSet[0] = c;
printf("%d ", c);
for(i = 1; c != EOF; i++) {
pSet = (int*) realloc(pSet, sizeof(int)*(i+1));
if(pSet == NULL) {
return FAIL;
}
scanf("%d", &c);
pSet[i] = c;
printf("%d ", c);
}

free(pSet);

最佳答案

Why does this happen (?) (print ... an infinite amount of times.)

查看循环终止条件 c != EOF

int c;
scanf("%d", &c);
for(i = 1; c != EOF; i++) { // Not good code
scanf("%d", &c);
}

EOF 是一些负值,通常是 -1。 scanf("%d", &c) 尝试读取用户输入并转换为 intscanf() 返回一个 1,0,EOF 取决于它是否 1) 成功,2) 失败查找数字文本或 3) 文件结尾或发生输入错误。不幸的是,代码不使用该返回值。相反,代码使用读取的数字 c 并检查读取的数字是否与 EOF 相同。


how can I fix that?

只有当 scanf() 的返回值符合预期时才循环(1)。

for(i = 1; scanf("%d", &c) == 1; i++) {
...
}

将其与其他一些想法放在一起

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

int main(void) {
printf("Please enter a stream of numbers to make a set out of them:\n");
int *pSet = NULL; // Start with no allocation
size_t i = 0;

int c;
for (i = 0; scanf("%d", &c) == 1; i++) {
// +--------------------------- No cast needed.
// v v----------v Use sizeof de-referenced pointer
void *p = realloc(pSet, sizeof *pSet * (i + 1));
if (p == NULL) {
free(pSet);
return EXIT_FAILURE;
}
pSet = p;
pSet[i] = c;
}

for (size_t j = 0; j < i; j++) {
printf("%d ", pSet[j]);
}

free(pSet);
return 0;
}

关于c - 如何修复随机数的无限打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53561945/

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