【发布时间】:2022-10-02 04:31:00
【问题描述】:
总和计算很好,但是,对于产品,使用的数字会创建一个大于 10 个整数的答案,这会给出错误的答案。我知道这是因为我使用的是 int。但是当我尝试浮动时,那也没有用。
有人可以解释如何使我的产品答案能够打印出大于 10 个整数的答案。
例如 6,20,4,16,15,11,6,3,19,18 的预期输出是 7800883200 但我的系统打印输出 72076004000
谢谢
#include <string.h>
#include <stdlib.h>
int main(int argc, char* argv[]){
if(argc<2){
printf(\"Invalid Input: filename value missing\\n\");
}
else{
char filename[50];
strcpy(filename,argv[1]);
FILE* fptr = fopen(filename,\"r\");
if(fptr==NULL){
printf(\"File not found!\\n\");
}
else{
int arr[10];
int i;
int val;
for(i=0;i<10;i++){
fscanf(fptr,\"%d\",&val);
arr[i] = val;
}
int sum = 0;
for(i=0;i<10;i++){
sum= sum + arr[i];
}
int product = 1;
for(i=0;i<10;i++){
product= product * arr[i];
}
printf(\"Sum: %d\\n\",sum);
printf(\"Product: %d\\n\",product);
fclose(fptr);
}
}
return 0;
}
-
fopen失败的原因有很多。您不应该假设这是因为找不到文件。让系统为你构造错误信息;将printf(\"File not found!\\n\");替换为perror(filename); -
如果输入与您的期望不符, fscanf() 可能会失败。始终检查返回值以查看您是否读取了预期的元素数量(在本例中为 1),否则 val 未定义。
-
你忘了
#include <stdio.h> -
出于好奇,您平台上的
INT_MAX是什么?如今,在大多数平台上,signed int 是 32 位的,这意味着它不能表示大于 2147483647 的值。 -
7800883200 是一个 33 位的数字。
标签: c