gpt4 book ai didi

c - 查找字符串中的位数时出现错误结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:17:03 25 4
gpt4 key购买 nike

情况是这样的:

首先,输入由第一行的测试用例数 m 和后面的 m 个测试用例组成。每个测试用例由一个少于 256 个字符的字符串组成。该字符串可能包含“空格键”。我的编程语言是 C。

那么,这是我的问题。我在我的代码中找不到任何问题,我可以完美地运行示例并获得正确的结果。但是,当我将它上传到在线判断系统时,它显示“WA(Wrong Answer)”。

这是我的代码。

#include<stdio.h>

int numberOfDigit(char input[255])
{
int num = 0;

for (int i = 0; input[i] != '\0'; i++) {
if (input[i] >= 48 && input[i] <= 57)
num++;
}

return num;
}

int main()
{
int numberOfTestCase;
char input[255];
int digit[9999];

scanf("%d", &numberOfTestCase);

for (int j = 0; j < numberOfTestCase; j++) {
fseek(stdin, 0, SEEK_END);
gets(input);
digit[j] = numberOfDigit(input);
}

for (int k = 0; k < numberOfTestCase; k++) {
printf("%d\n", digit[k]);
}

return 0;
}

我想在我的编码过程中解释一些事情。

因为输入包含空格字符,所以我使用 gets() 函数,这样我就可以在不停止输入空格的情况下获取字符串。但是,如果我不添加 fseek(stdin, 0, SEEK_END);gets() 只会出现 numberOfTestCase-1 次,我在 stackOverflow 上询问,并被告知 fseek(stdin, 0, SEEK_END); 可以解决问题,我不知道为什么。但是当我添加的时候,问题解决了,但是在在线判断系统中测试失败。

我的错误是什么?

最佳答案

fgets() 会在看到换行符时停止读取输入。此外, fseek() 可能不适用于标准输入,并且对于您的目的来说是不必要的。相反,您也可以使用 fgets() 来读取第一行,而不是 scanf()。然后你可以使用 sscanf()读取输入的数字。

类似于:

fgets(input, sizeof input, stdin);
sscanf(input, "%d", &numberOfTestCase);

for (int j = 0; j < numberOfTestCase; j++) {
fgets(input, sizeof input, stdin);
digit[j] = numberOfDigit(input);
}

for (int k = 0; k < numberOfTestCase; k++) {
printf("%d\n", digit[k]);
}

您还可以使用字符常量代替硬编码 ASCII 值,这样可读性和可移植性更高:

for (int i = 0; input[i] != '\0'; i++) {
if (input[i] >= '0' && input[i] <= '9')
num++;
}

关于c - 查找字符串中的位数时出现错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35088613/

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