
正文
c语言pwrite函数 c语言实现pwd
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C程序里,用pwrite函数输出结构体为什么是出现部分乱码?怎么解决?
想要在用记事本打开以后不是乱码,必须fwrite的时候全部写入char型数据。而你的结构体里还有float型和指针类型,不应该盲目地直接用exc当fwrite的参数去写,而应该一项一项地把数据转成字符串,再fwrite到文件里。例如:
fwrite(exc-NO,
strlen(exc-NO),
1,
fp);
fwrite(exc-name,
strlen(exc-name),
1,
fp);
fwrite(exc-sex,
1,
1,
fp);
char
temp[20];
sprintf(temp,"%f",exc-score1);
fwrite(temp,
strlen(temp),
1,
fp);
sprintf(temp,"%f",exc-score2);
fwrite(temp,
strlen(temp),
1,
fp);
sprintf(temp,"%f",exc-score3);
fwrite(temp,
strlen(temp),
1,
fp);
相关问答
Q1: 编写线程并发拷贝程序,通过模拟管道文件的实现(管道定义、创建管道、读管道程序和写管道程序程序实现)
#include sys/wait.h
#include assert.h
#include stdio.h
#include stdlib.h
#include unistd.h
#include string.h
int main(int argc, char *argv[])
{
int pfd[2];
pid_t cpid;
char buf;
assert(argc == 2);
if (pipe(pfd) == -1)
{
perror("pipe");
exit(EXIT_FAILURE);
}
//创建子进程
cpid = fork();
if (cpid == -1)
{
//创建子进程失败
perror("fork"); exit(EXIT_FAILURE);
}
if (cpid == 0)
{ /* 子进程中读取管道里面读数据 */
close(pfd[1]); /* 关闭不使用c语言pwrite函数的管道写入端 */
while (read(pfd[0], buf, 1) 0)
{
write(STDOUT_FILENO, buf, 1);//在标准c语言pwrite函数的输出设备上输出读取管到c语言pwrite函数的内容
}
write(STDOUT_FILENO, "\n", 1);
close(pfd[0]);
_exit(EXIT_SUCCESS);
}
else
{ /* 父进程将参数 argv[1]字符串 写入管道 */
close(pfd[0]); /* 关闭不使用c语言pwrite函数的管道读取端 */
write(pfd[1], argv[1], strlen(argv[1]));
close(pfd[1]); /* 关闭管道写入端,此时读取端就会收到 EOF 标志*/
wait(NULL); /* 等待子进程运行结束 */
exit(EXIT_SUCCESS);
}
}
Q2: 怎样用C语言编程实现从1乘到100的结果?
100的阶乘已经是大数相乘了,在c语言中没有现成的数据型可以用,所以用数组模拟计算,以下是对楼上程序的解释 #include stdio.h
#define MAXN 1000
int a[MAXN],b[MAXN];
void pwrite(int *a,int k,int c)//将计算的结果数组[a]按每一位输出,k为所计算数字,i为计算所得位数,计算后所得结果是按从最后一位到第一位,故应该倒序输出
{
int i;
printf("%4d != ",k);
for(i= c-1;i=0;i--)
{
printf("%d",a[i]);
}
printf("\n\n");
}
void pnext(int k,int *cp);
int main(void)
{
int n,c,k;
printf("Enter the number n(n=100):");
scanf("%d",n);
a[0]=1;
c=1; //初始化长度为1,随计算位数增加
/*pwrite(a,1,c);*/
for(k=2;k=n;k++)
{
pnext(k,c); //此处计算结果,计算1*2*3*...*n
//pwrite(a,k,c);
if (k==n)
{
pwrite(a,k,c);//计算到n时输出
}
}
system("pause");
return 0;
}
void pnext(int k,int *cp) //cp此处代表计算的位数,n代表将要乘的数字
{
int i, j;
int temp = *cp;
for ( i=0; itemp; i++ )
{
b[i] = a[i]; //利用b[i]作为暂时记录的数组
}
for ( i=1; ik; i++ )// add for k-1 times
{
for ( j=0; jtemp; j++ )
{
a[j] += b[j]; //每一位对齐相加,
if ( a[j] 9 )
{
a[j+1] += a[j]/10;
a[j] = a[j]%10; //如果大于9则进位
if ( j == *cp-1 )// add *cp for only once
{
(*cp)++; //如果是最高位,则自加即可,不必进位
}
}
}
}
while ( a[*cp-1] 9 )
{
a[*cp] += a[*cp-1]/10;
a[*cp-1] = a[*cp-1]%10;
(*cp)++; //对最高位进行处理,此时n值已变,故应自加
}
}
关于c语言pwrite函数和c语言实现pwd的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。





