我只想从文件中输出3个整数。为什么这不起作用?我得到-1079184140和类似的。
int main(int argc, char *argv[])
{
FILE* stream = fopen(argv[2], "r");
char line[80];
for (int i = 0; i < 3; i++)
{
fgets(line, 80, stream);
printf("%d \n", line);
}
fclose(streamForInput);
}
答案 0 :(得分:3)
我会使用sscanf。
int number;
sscanf (line, "%d", &number);
printf ("%d \n", number);
这将拉出一行上的第一个整数。这不是最安全或最强大的方式,但这超出了范围。
PS:
fclose(streamForInput);
应该是:
fclose(stream);
答案 1 :(得分:2)
嗯。第一个问题是:
printf("%d \n", line);
因为line是char []。但是你使用%d来输出它,所以输出行,这是一个地址。所以printf打印行的地址...而不是你使用printf(“%d”,atoi(line));
答案 2 :(得分:1)
要打印line
所使用的字符串,请使用%s
:
printf("%s \n", line);
现在,如果它确实是一个整数,你可以使用%d
:
int num = atoi(line);
printf("%d \n", num );
您所看到的是将指针类型(C中的字符串基本上是什么)视为整数类型的结果。由于指针保存内存地址,因此-1079184140是指针保存的实际地址,表示为32位有符号整数。
答案 3 :(得分:1)
如果您确切知道文件的内容(三个数字用空格分隔),为什么不直接阅读呢?
if (fscanf(stream, "%d%d%d", &foo, &bar, &baz) < 3)
// handle error
printf("%d\n%d\n%d\n", foo, bar, baz);
但是如果你想读行,那已经有了其他好的答案。
答案 4 :(得分:0)
逐行读取文件中的整数
void read_file(char *filename, int *readbuff, int size)
{
FILE *fp = fopen(filename,"r");
if(fp == NULL){
printf("Failed to open file %s \n", filename);
return;
}
/*the condition in for loop checks if the integer was read into
readbuff[i] and the readbuff is not overflown*/
for(int i = 0 ; fscanf(fp,"%d\n",&readbuff[i]) == 1 && i < size; ++i);
fclose(fp);
return;
}