有没有会C语言的帮我看一下这道题?

#include <stdio.h>
void main()
FILE *fp; int i;
char ch[]="abcd",t;
fp=fopen("abc.dat","wb+");
for(i=0; i<4; i++) fwrite(&ch[i],2,1,fp);
fseek(fp,-3L,SEEK_END);
fread(&t,1,1,fp);
fclose(fp);
printf("%c\n",t);
程序执行后输出的结果是( )。

A.d
B.c
C.b
D.a
我想请问一下第六行的代码是什么意思?fwrite函数里面的2,1,fp又是啥意思?
第七行fseek又是什么意思?第八行的1,1,fp又是啥意思?
最后再说一下答案怎么来的,谢谢

【问题1】第六行的代码是什么意思?
for(i = 0; i < 4; i++) fwrite(&ch[i], 2, 1, fp);
for 从 0 - 3 历遍了ch字符串数组的下标 0-3 (共计4个)
fwrite 从 ch 字符串数组中拿取数据,并向 fp 指向的 "abc.dat" 文件写入数据
【问题2】 fwrite函数里面的2,1,fp又是啥意思?
首先 fwrite 函数定义如下
size_t fwrite(void * ptr, size_t size, size_t items, FILE * fp);
可以理解为 fwrite(提供数据位置,数据包大小,数据包个数,写入文件)
其中 2 指每个数据包大小为 2 字节
其中 1 指每次写入 1 个数据包
其中 fp 指打开的 abc.dat 文件
【问题3】 答案怎么来的
如果你理解了上面的函数的含义,就可以知道在 abc.dat 文件里的数据为
"abbccdd\n"
fseek(fp, -3L, SEEK_END) 将文件指针放置在 "dd\n" 位置
并且再读取下一个字节 'd' 并且输出的话,答案应该选 A
【附注】 如果还是云里雾里
编程需要时间与耐心,认真学懂 <stdio.h> 函数里各个函数的功能和概念,并且要明白 FILE 文件指针的含义,感觉有提问 fp 是什么的时刻,就差距很多咯追问

为什么abc.dat里面的数据是abbccdd\n而不是aabbccdd\n呢?

追答

这个 for 循环里做的事情
首先从第1个字符开始,存入两个字符 "ab"
然后从第2个字符开始,存入两个字符 "bc"
然后从第3个字符开始,存入两个字符 "cd"
然后从第4个字符开始,存入两个字符 "d\n"
总结就是 "abbccdd\n" 至于不对称,那的确是不对称

温馨提示:内容为网友见解,仅供参考
无其他回答

有没有会C语言的帮我看一下这道题?
fseek(fp, -3L, SEEK_END) 将文件指针放置在 "dd\\n" 位置 并且再读取下一个字节 'd' 并且输出的话,答案应该选 A 【附注】 如果还是云里雾里 编程需要时间与耐心,认真学懂 <stdio.h> 函数里各个函数的功能和概念,并且要明白 FILE 文件指针的含义,感觉有提问 fp 是什么的时刻,就差距很多...

能帮我看一下这道题用c语言怎么写吗?
\/\/ 如果没有找到“wang”姓的同学,则输出提示信息 printf("There are no students with the last name 'wang' in the class.\\n");} \/\/ 释放分配的内存 free(wang_students);return 0;} 上面的代码中,我们定义了一个字符串数组来存储班上所有同学的姓名,然后使用 get_wang_students 函数来...

哪位大神帮我看一下这道C语言的题
答案为:B 如果语句改成这样:struct S {int g ; char h;} T;,则可以用struct S定义结构体变量,此时的T是声明类型的同时定义了变量,在这种情况下选D 而加上typedef后等于为struct S取了一个新的名字——T,此时T等价于struct S,或者说T是struct S的另一种称呼。所以选B。

请C语言大神看看这个题目,帮我解释一下怎么来的,表示本人新手
printf( char *fmt, ... ) 函数原型 第一部分是格式串fmt,用来表明,输出数据的格式 后面的余下部分为格式串中对应的变量 char*s="#include %cstdio.h%c%cchar*s=%c%s%c;%cint main(){printf(s,34,s,10,34);return 0;}"; \/\/这里就是定义一个格式串 printf(s,34,34,10,34,s...

C语言求助,哪位大佬帮我看看这道题?一直搞不清楚
知道答主 回答量:133 采纳率:0% 帮助的人:5.2万 我也去答题访问个人页 关注 展开全部 这是一道C语言的增删改查的链表操作操作的典型题目,同时考察对结构体的理解程度。最简单的就是使用顺序链表做。 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 ...

c语言:有哪位大侠可以帮我解释一下下面这道题目???
int main() \/\/表示一下内容为主函数 {int prime(int); \/\/这个用途是前置函数声明、因为被调哈数prime是在主函数后面的所以需要函数声明 printf("input an integer:"); \/\/这个作为人机交互、在执行之后输出input an integer具体自己翻译 scanf("%d",&n); \/\/这里作为n变量的取值、功能是手动...

C语言题目 求大佬帮看一下
首先说一下题目的答案是:11 程序运行了一下, 截图如下:下面解析一下原因:1、根据判断条件来看,当 k = 10时, while 条件不成立。2、但是需要注意的一点是,在while条件中,使用的是 K++, 而++符号在后面。3、++运算符使用有两种, 先+1在用, 和先使用在+1。而此处使用的明明是后者。4...

C语言,帮我看看,这道题的程序是死循环了,还是文件写入字节太大?怎么...
1. 在void fun(int a[],int b[],int n)中 for(i=0;i<n;i++) \/\/数组越界了,应该改成for(i=0;i<6;i++)b[i]=0;2. 检查一下in4.dat中的数据格式是否正确,要符合"%d,"别少了逗号多了空格什么的 且数据足够多(至少100个)或者你在程序中检查fscanf(rf,"%d,",&a[j])...

C语言的一道题不会做了,求大神帮一下
第一题: a=4,b=8, 所以 (b==a) 为假,假就是 0,c= (b==a); c 得 0。语句中 a,b 数值 未发生过变化,保持初始值 a=4,b=8。所以输出 a,b,c 印出: 4,8,0 第二题:输入58,a=58;a>50 的条件成立,输出a值,印58 a>40 的条件成立,输出a值,印58 a>...

这道题用C语言怎么编写,谢谢!不甚感激,我是大一的,望能够讲的明摆着,谢 ...
\/* 计数器 *\/ for (i = 0; i < count; i++) { if (i == 0) { \/* 第一次落地是直接落下,没有弹起,所以总路程不用乘2 *\/ sum += hight; } else { \/* 后面的落地都是先弹起,再落地,所以总路程需要弹起得高度乘2 *\/ sum += hight * 2; } hight ...

相似回答