情况如下:
首先,输入包括第一行中的测试用例数量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;
} 我想在我的编码过程中解释一些事情。
因为输入包含空格字符,所以我使用gets()函数,这样就可以在不输入空格的情况下获得字符串。但是,如果我不添加fseek(stdin, 0, SEEK_END);,gets()只出现numberOfTestCase-1时间,我在stackOverflow上询问,并被告知fseek(stdin, 0, SEEK_END);可以解决问题,但我不知道为什么。但是当我加上它的时候,这个问题就解决了,但是它在在线判断系统中没有通过测试。
我犯了什么错?
发布于 2016-01-29 16:18:56
如果fgets()看到换行符,它将停止读取输入。此外,for ()可能不会在stdin上工作,而且对您的目的来说也是不必要的。相反,您可以使用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]);
}您还可以使用chracter常量,而不是硬编码的ASCII值,这是更易读和可移植的:
for (int i = 0; input[i] != '\0'; i++) {
if (input[i] >= '0' && input[i] <= '9')
num++;
}https://stackoverflow.com/questions/35088613
复制相似问题