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