C中的长整数
我如何在C语言中读取一个12或13位的长整数(比如一本书的ISBN号)?我想从包含书籍信息的文本文件(ISBN/name/writer)中读取数字 文本文件的内容如下所示: 0393312836 发条橙 安东尼·伯吉斯 0199536759 米德尔马奇 布雷特·伊斯顿·埃利斯 我使用的代码是: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
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:没错,我只是建议了最快的改变。