gpt4 book ai didi

code jam练习--阅读题

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:12 26 4
gpt4 key购买 nike

我指的是 code jam,因为你们中的大多数人都会理解我们拥有的输入文件类型。问题是 - 2010 年资格赛(鲷鱼)

我在我的程序中遇到的问题是,它将 100005 的第一个输入读取为 10000 5 作为两个单独的整数,从而改变了程序的整个输入。这是我读取输入的代码:

#include<stdio.h>

int main()
{
FILE *op=fopen("20101op.txt","w");
FILE *ip=fopen("A-small-practice.in","rt");

long int i,N,K,c;
fscanf(ip,"%ld ",&c);

printf("%d \t", c);
fscanf(ip,"%ld ",&N);
printf("%d \t", N);
fscanf(ip,"%ld ",&K);
printf("%d \t", K);

fclose(op);
fclose(ip);

return 0;
}

请帮我找出这个问题的原因!

最佳答案

看起来您的编译器试图通过将 fscanf 限制为 16 位来防止溢出。

您使用的是什么编译器(和版本)以及什么操作系统? 32 位还是 64 位?

此外,fscanf 返回什么?

(通过更改此行进行测试:

fscanf(ip,"%ld ",&c);

到这些行:)

int rv;
rv = fscanf(ip,"%ld ",&c);
printf("fscanf() returned: %d\n", rv);

注意:我无法对上述响应发表评论(声誉不够),但在某些编译器中使用“t”来明确指定该文件是文本文件。

更新:此函数应逐个字符地解析 long。请参阅我关于使用它的评论。

int fparselong(FILE * fp, long * ip)
{
int parsed = 0;
*ip = 0;
int c;
while((c = fgetc(fp)) != EOF)
{
// c is newline, return 0 if nothing has been parsed, 1 if something has
if(c == '\n'){ return parsed; }
// check for oob
if(c < '0' || c > '9'){ return -1; }
// Update ip
*ip = *ip * 10 + (c - '0');
// Something has been parsed
parsed = 1;
}
// EOF received
return -2;
}

所以而不是:

fscanf(ip,"%ld ",&c);

你会:

fparselong(ip, &c);

同样,如果这可行,请不要使用它,而是寻找另一个编译器。如果没有,则表明您的文件中出现了意外字符。你可以 hexdump您的输入文件或使用其他一些方法来确定这一点。

关于code jam练习--阅读题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5894875/

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