C中的长整数

时间:2011-05-31 18:12:33

标签: c file integer long-integer

嘿伙计们,这里的初学者问题。

如何在C中读取12或13位数的长整数(如书的ISBN号)? 我想从带有书籍信息的文本文件中读取数字(ISBN /名称/作者)。

文本文件的内容如下:

  

0393312836

     

发条橙

     

Anthony Burgess

     

0199536759

     

米德尔马契

     

Bret Easton Ellis

     

...

     

...

     

...

我正在使用此代码:

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位数或更少的数字,他只会阅读这些数字。我该怎么办才能使这项工作?

提前致谢。

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:8)

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

答案 2 :(得分:1)

尝试使用unsigned long long%llu说明符。前者应该是大多数平台上的64位数字。

您也可以尝试将其作为字符串阅读。这取决于您是想将其作为字符串操作还是稍后操作。

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

答案 3 :(得分:1)

最好以字符串或字符数组的形式读取它们。 ISBN号码就是你要对它们进行计算的意义上的数字。相反,它们更像是一个恰好是数字的引用字符串。读取字符数组将允许您获得包含破折号或其他分隔符的ISBN号,如下所示:http://www.isbn.org/standards/home/isbn/international/html/usm4.htm

如果您真的想将它们存储为数字,则应将其作为char数组读取并清理它,以防输入中出现空格,短划线或其他非数字字符。