Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中的长整数_C_File_Integer_Long Integer - Fatal编程技术网

C中的长整数

C中的长整数,c,file,integer,long-integer,C,File,Integer,Long Integer,我如何在C语言中读取一个12或13位的长整数(比如一本书的ISBN号)?我想从包含书籍信息的文本文件(ISBN/name/writer)中读取数字 文本文件的内容如下所示: 0393312836 发条橙 安东尼·伯吉斯 0199536759 米德尔马奇 布雷特·伊斯顿·埃利斯 我使用的代码是: int main(void){ FILE *f; char name[MAX], writer[MAX], line[MAX]; long isbn; f=fop

我如何在C语言中读取一个12或13位的长整数(比如一本书的ISBN号)?我想从包含书籍信息的文本文件(ISBN/name/writer)中读取数字

文本文件的内容如下所示:

0393312836

发条橙

安东尼·伯吉斯

0199536759

米德尔马奇

布雷特·伊斯顿·埃利斯

我使用的代码是:

int main(void){

    FILE *f;
    char name[MAX], writer[MAX], line[MAX];
    long isbn;

    f=fopen("path.txt","r");
    if(f == NULL){
        return 0;
        }

    while (fgets(line, 1024, f) != NULL){

        sscanf(line,"%ld", &isbn);
        printf("ISBN: %ld\n",isbn);

        fgets(nome, 1024, f);
        printf("NAME: %s",name);

        fgets(line, 1024, f);
        printf("WRITER: %s",writer);


        }
    fclose(f);

    return 0;

}

他能读懂书和作家的名字,但他只会读懂9位数或更少的数字。我必须做些什么才能使此工作正常?

尝试使用
无符号long-long
%llu
说明符。在大多数平台上,前者应为64位数字

你也可以试着把它当作字符串来读。这取决于以后是将其作为字符串还是数字进行操作


例如,如果要按字母顺序对其排序,请将其作为字符串读取。如果要将它们作为数字进行排序,请将其视为数字。

只需将其作为字符串(
char
array)进行读取,并将其视为数字即可。使用
int
时,您也会在开始时丢失重要的零以及有限的范围。ISBN号码、电话号码等最好作为字符串处理,因为它们不代表实数(在数学意义上),而只是标识符。

我认为对于ISBN,使用字符串会更好。您不需要对值执行算术运算,您可以存储前导零,并且您需要一个字符串来存储可以在ISBN 10校验和中获得的X。

最好将它们作为字符串或字符数组读入。ISBN数字是指你将要对其进行计算的数字。相反,它们更像是一个引用字符串,恰好是数字。读取字符数组将使您获得包含破折号或其他分隔符的ISBN编号,如下所述:


如果您确实想将其存储为数字,则应将其作为字符数组读入,并在输入中有空格、破折号或其他非数字字符时将其清除。

您需要长格式代码,因为长格式可能只有32位。您是否尝试过
%lld
?ISBN不是整数,它有一个.正确的。但您没有得到提升票,因为您建议使用
%llu
而不是
strtoll
*scanf
功能不能可靠地用于此类工作;当输入与预期不符时,它们不会给你足够的控制权。@Zack:没错,我只是建议了最快的改变。