C中的长整数



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

文本文件的内容如下:

0393312836

发条橙色

Anthony Burgess

0199536759

Middlemarch

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: %ldn",isbn);
        fgets(nome, 1024, f);
        printf("NAME: %s",name);
        fgets(line, 1024, f);
        printf("WRITER: %s",writer);

        }
    fclose(f);
    return 0;
}

他能读懂书的名字和作者的名字,但只有9位数或以下的数字,他才能读懂。我必须做些什么才能让它发挥作用?

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

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

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

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

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

最好将它们作为字符串或字符数组读取。从某种意义上说,ISBN编号是数字,您将对其进行计算。相反,它们更像是一个恰好是数字的引用字符串。读取字符数组可以获得包含破折号或其他分隔符的ISBN编号,如下所述:http://www.isbn.org/standards/home/isbn/international/html/usm4.htm

如果你真的想把它们存储为数字,你应该把它读成一个字符数组,并在输入中有空格、破折号或其他非数字字符的情况下清理它。

相关内容

  • 没有找到相关文章

最新更新