gpt4 book ai didi

c - 读取换行数

转载 作者:行者123 更新时间:2023-11-30 16:10:30 26 4
gpt4 key购买 nike

我创建了这段代码,但它告诉我\n 的数量始终为 0..\n 在 ASCII 中是 10 是对的还是我错了?有没有更简单的方法?

来自文件的C程序,它需要换行符的数量。父亲创造了8个儿子。每个儿子都拿一份文件(1/8)儿子的值(value)会回归到父亲身上当所有儿子都返回时,父亲打印所有值的总和

#include <stdio.h>
#include <stdlib.h>
#include <ourhdr.h>

#define taglia 1000

void figlio(int,int,int*,char*);


int main(int argc,char*argv[]){

if(argc<1)
return 0;
int fd;
if((fd=open(argv[1],O_RDONLY)) < 0)
err_sys("Open failed");
int sum=0,k;
pid_t process[8];
int p[8][2];

for(int i=0;i<8;i++){
if((pipe(p[i])) < 0)
err_sys("Pipe failed");
if((process[i]=fork()) < 0)
err_sys("Fork failed");
else if(process[i]==0){
figlio(i,fd,p[i],argv[1]);
exit(0);
}
else{
if((wait(NULL)) < 0)
err_sys("Wait failed");
}
}

for(int i=0;i<8;i++){
if((read(p[i][0],&k,sizeof(int))) < 0)
err_sys("Read failed");

sum+=k;
}

printf("Somma di tutte le linee = %d",sum);
}



void figlio(int i,int fd,int p[],char argv[]){

int linee=0;
int l;
//if((open(p[0],O_RDONLY)) < 0)
//err_sys("Open figlio failed");

if((fd=open(argv,O_RDONLY)) < 0)
err_sys("Open failed");

if((lseek(fd,taglia*i*sizeof(int),SEEK_SET)) < 0)
err_sys("lseek failed");

for(int j=0;j<taglia/8;j++){
if((read(fd,&l,sizeof(int))) < 0)
err_sys("read this failed");

if(l==10)
linee++;

}

if((write(p[1],&linee,sizeof(int))) < 0)
err_sys("Write failed");

}

最佳答案

当我认为您打算读取单个char时,您正在读取int block 。

例如,在这一行中:

/* int l = 0; */

if((read(fd,&l,sizeof(int))) < 0)
err_sys("read this failed");

应该是这样的:

/* char l = 0; */

if((read(fd,&l,sizeof(char))) < 0)
err_sys("read this failed");

如果我不得不猜测,我想你可能必须将这一行更改为:

if((lseek(fd,taglia*i*sizeof(int),SEEK_SET)) < 0)
err_sys("lseek failed");

进入:

if((lseek(fd,taglia*i*sizeof(char),SEEK_SET)) < 0)
err_sys("lseek failed");

关于c - 读取换行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58874183/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com