C 从文件打印整数

C 从文件打印整数,c,C,我在读取整数文件时遇到一些问题。我想在终端上打印文件(input.txt)中的每个整数。input.txt由每行一个整数构成 Input.txt: 1234 234 9083 8738 34 345678 30920 代码: 我的代码出了什么问题 看起来您有一个包含数字的文本文件。您试图读取它,就好像它是一个包含int的二进制文件一样。字符串“345678”是一个六字节的字符序列。int值345678是一个与平台相关的四字节(通常)位序列……可以通过查看您的第一个输出编号875770417进行

我在读取整数文件时遇到一些问题。我想在终端上打印文件(input.txt)中的每个整数。input.txt由每行一个整数构成

Input.txt:

1234
234
9083
8738
34
345678
30920
代码:


我的代码出了什么问题

看起来您有一个包含数字的文本文件。您试图读取它,就好像它是一个包含int的二进制文件一样。字符串
“345678”
是一个六字节的字符序列。
int
345678
是一个与平台相关的四字节(通常)位序列……可以通过查看您的第一个输出编号
875770417
进行验证,十六进制为
34333231
,是
“1234”
小尾端的ASCII字节,您的第一个文本字符串。
mmap
对于此处的作业来说是完全错误的工具。
int i;文件*fp=fopen(“input.txt”,“r”);而(fscanf(“%d”,&i)==1)printf(“%d\n”,i);
字符行[256];文件*fp=fopen(“input.txt”,“r”);而(fgets(line,sizeof line,fp))fputs(line,stdout)看起来您有一个包含数字的文本文件。您试图读取它,就好像它是一个包含int的二进制文件一样。字符串
“345678”
是一个六字节的字符序列。
int
345678
是一个与平台相关的四字节(通常)位序列……可以通过查看您的第一个输出编号
875770417
进行验证,十六进制为
34333231
,是
“1234”
小尾端的ASCII字节,您的第一个文本字符串。
mmap
对于此处的作业来说是完全错误的工具。
int i;文件*fp=fopen(“input.txt”,“r”);而(fscanf(“%d”,&i)==1)printf(“%d\n”,i);
字符行[256];文件*fp=fopen(“input.txt”,“r”);而(fgets(line,sizeof line,fp))fputs(line,stdout)
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <zconf.h>
#include <sys/mman.h>
int main(int argc, char** argv){
   int fd = open(argv[1], O_RDONLY);
   if(fd == -1){
      printf("Error with input file\n");
      return -1;
   }
   struct stat buf;
   int fstatTest = fstat(fd, &buf);
   if (fstatTest == -1) {
       printf("Error with fstat\n");
       return -5;
   }
   int* map = (int*) mmap(NULL,buf.st_size,PROT_READ,MAP_SHARED,fd,0);
   if(map == MAP_FAILED){
      close(fd);
      printf("Error with mmap");
      return -4;
   }
   for(int i = 0; i < buf.st_size/sizeof(int); i++){
      printf("%d\n",map[i]);
   }
   if((munmap(map,buf.st_size)<0)){
      close(fd);
      printf("Error with munmap\n");
   }
   if(close(fd) <0){
       printf("Error while closing input");
       return -4;
   }
   return 0;
}
875770417
875770378
942684426
926419507
856307763
875760180
943142453
959460106