如何在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位数或更少的数字,他只会阅读这些数字。我该怎么办才能使这项工作?
提前致谢。
答案 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数组读取并清理它,以防输入中出现空格,短划线或其他非数字字符。