gpt4 book ai didi

在 C 中使用 while(scanf) 时出现代码块错误

转载 作者:行者123 更新时间:2023-12-02 10:41:21 25 4
gpt4 key购买 nike

我在下面附上了一段代码,它在在线编译器中运行良好,但在使用 C 时无法在 Code Blocks 编译器中运行。我还附上了屏幕截图。

#include <stdio.h>

int main() {
int i = 0;
int array[100];
while(scanf("%d",&array[i])>0)
{
i++;
}
for(int j=0;j<i;j++)
{
printf("%d ",array[j]);
}
return 0;
}

Using Online compiler(GeeksForGeeks)

Using CODEBLOCKS compiler

最佳答案

没有错误,你的while循环将一直持续到输入无效输入为止,您对输入的数量没有限制,因此它将继续取值,这可能会在以后成为问题,因为您的容器只有 100 int 的空间s。

它在一些在线编译器上停止,因为它们使用 stdin 的方式输入,它基本上是一次读数。

示例:

它停止here , 有一次stdin读出。

它不会停止here , 有一个类似输入/输出的控制台。

因此,如果您想在给定数量的输入处停止,您可以执行以下操作:

//...
while (i < 5 && scanf(" %d", &array[i]) > 0)
{
i++;
}
//...

这将显示为 5 int s,退出循环,继续下一条语句。

如果您真的不知道输入的数量,您可以执行以下操作:
//...
while (i < 100 && scanf("%d", &array[i]) > 0) { // still need to limit the input to the
// size of the container, in this case 100
i++;
if (getchar() == '\n') { // if the character is a newline break te cycle
// note that there cannot be spaces after the last number
break;
}
}
//...

以前的版本缺少一些错误检查,因此对于更全面的方法,您可以执行以下操作:
#include <stdio.h>
#include <string.h> // strcspn
#include <stdlib.h> // strtol
#include <errno.h> // errno
#include <limits.h> // INT_MAX

int main() {

char buf[1200]; // to hold the max number of ints
int array[100];
char *ptr; // to iterate through the string
char *endptr; // for strtol, points to the next char after parsed value
long temp; //to hold temporarily the parsed value
int i = 0;

if (!fgets(buf, sizeof(buf), stdin)) { //check input errors

fprintf(stderr, "Input error");
}

ptr = buf; // assing pointer to the beginning of the char array

while (i < 100 && (temp = strtol(ptr, &endptr, 10)) && temp <= INT_MAX
&& errno != ERANGE && (*endptr == ' ' || *endptr == '\n')) {

array[i++] = temp; //if value passes checks add to array
ptr += strcspn(ptr, " ") + 1; // jump to next number
}

for (int j = 0; j < i; j++) { //print the array

printf("%d ", array[j]);
}
return EXIT_SUCCESS;
}

关于在 C 中使用 while(scanf) 时出现代码块错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62406686/

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