gpt4 book ai didi

c - 使用 scanf 读取整数但如果输入字母则崩溃的函数

转载 作者:太空狗 更新时间:2023-10-29 16:00:26 25 4
gpt4 key购买 nike

我是 C 的新手,我想编写一个函数,从标准输入读取一系列以空格分隔的整数,直到达到最大计数或 EOF 发生或遇到非整数。 maxNumInts 是要读取的最大整数个数,nums 是至少包含 maxNumInts 个整数的数组,整数被读入其中。 readInts()的返回值是读入数组nums的整数个数。

#include <stdio.h>

int readInts(int maxNumInts, int nums[]) {
int count = 0;

while (scanf("%d", &nums[count++]) != EOF && count < maxNumInts) {
}
return count;
}

int main() {
int nums[5] = { -1, -1, -1, -1, -1 };
int n = readInts(4, nums);
printf("n = %d\n", n);
for (int i = 0; i < 5; i++) {
printf("nums[%d] = %d\n", i, nums[i]);
}
}

我通过输入数字进行了测试并且它有效但是当我试图通过输入来测试它:

10 100 1000 Oops -999
It returns:n = 4
nums[0] = 10
nums[1] = 100
nums[2] = 1000
nums[3] = -1
nums[4] = -1

n 应该是 3。我该如何解决?我更喜欢使用 scanf()

最佳答案

int readInts(int maxNumInts, int nums[])
{
int count = 0;

while(scanf("%d",&nums[count++]) != EOF && count < maxNumInts) {
}
return count;
}

即使在调用失败时,您也在增加 count。 scanf 还返回读取的项目数,因此当它没有读取任何内容时将返回零而不是 EOF。

尝试

int readInts(int maxNumInts, int nums[])
{
int count = 0;

while((1 == scanf("%d",&nums[count])) && (count < maxNumInts)) {
count++;
}
return count;
}

我强烈建议您获得一个 IDE,例如 Eclipse , Code::Blocks , Microsoft Visual Studio或者你喜欢的其他一些东西。

接着学习调试器

  • 如何设置断点
  • 如何检查变量
  • 如何逐行执行代码
  • 如何检查调用堆栈
  • 等等

enter image description here

由于您似乎是新手,请注意https://codereview.stackexchange.com/当你的代码运行时,把它贴在那里,你会得到关于如何改进它的建议(比如 n 不是一个非常有意义的变量名)

当您可以做到这一点时,您将永远不必再为此类问题等待帮助,因为您可以在调试器中轻松找到它们。

关于c - 使用 scanf 读取整数但如果输入字母则崩溃的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51768447/

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