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

C 查找字符串中的位数时出现错误结果,c,string,algorithm,fseek,C,String,Algorithm,Fseek,情况如下: 首先,输入包括测试用例的数量,m,在第一行,然后是m测试用例。每个测试用例由一个少于256个字符的字符串组成。字符串可能包含“空格键”。我的编程语言是C 那么,这就是我的问题。我在我的代码中找不到任何问题,我可以用正确的结果完美地运行示例。然而,当我上传到在线判断系统时,它显示“WA(错误答案)” 这是我的密码 #include<stdio.h> int numberOfDigit(char input[255]) { int num = 0; for

情况如下:

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

那么,这就是我的问题。我在我的代码中找不到任何问题,我可以用正确的结果完美地运行示例。然而,当我上传到在线判断系统时,它显示“WA(错误答案)”

这是我的密码

#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;
} 
#包括
int numberOfDigit(字符输入[255])
{
int num=0;
对于(int i=0;输入[i]!='\0';i++){
如果(input[i]>=48&&input[i]
fgets()
在看到换行符时将停止读取input。另外,fseek()可能无法在stdin上工作,对您的目的没有必要。相反,您可以
fgets()
读取第一行,而不是
scanf()
。然后您可以使用来读取输入号

比如:

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]);
}
fgets(输入,输入大小,标准输入);
sscanf(输入、%d、&numberOfTestCase);
对于(int j=0;j
您还可以使用chracter常量,而不是硬编码ASCII值,这更易于阅读和移植:

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

如果(input[i]>='0'&&input[i]不使用
get
,这是危险的。自C99标准以来,它也被弃用,并在C11标准中被删除。请改用
fgets
。因此,我将其改为fgets(input,256,stdin);但现在有什么问题吗?我只剩下3次机会将其交给法官系统。您需要找出在线法官系统失败的原因。我建议您从创建一些自己的测试用例开始。选择一些输入,并确定
numberOfDigit()的预期输出
function。从简单的测试用例开始。目标是找到导致代码在线判断失败的测试用例。缓冲区太短。如果字符串最多包含255个非零字符,则需要至少256字节的缓冲区来存储结尾为零的字符串。谢谢。这是正确的答案。我从未考虑过usin让我读第一行而不是scanf。我从中学到了很多。谢谢。