帮我写一道C语言的题目?

编写一个程序,使其从标准输入读取字符,直到遇到文件结尾。对于每个字符,程序需要检查并报告该字符是否是一个字母。如果是的话,程序还就报告该字母在字母表中的数值位置。倒,C和... 编写一个程序,使其从标准输入读取字符,直到遇到文件结尾。对于每个字符,程序需要检查并报告该字符是否是一个字母。如果是的话,程序还就报告该字母在字母表中的数值位置。倒,C和c的字母位置都是3.可以先实现这样一个函数,接受一个字符参数,如果该字符 为字母则返回该字母的数值位置,否则返回-1

关键是直到遇到文件结尾这个要怎么做?
展开
冒险岛乐乐
2008-11-24 · TA获得超过1969个赞
知道小有建树答主
回答量:621
采纳率:0%
帮助的人:0
展开全部
本题的程序在win-tc和Dev-c++下调试通过,花了我一个多小时。
说明:这里是先从文件w1.dat中读出数据,w1.dat文件要存在且和本程序要在同一个目录下,要不要用绝对路径打开文件.程序执行后先打印出源文件w1.dat的一行内容,接着下一行对应打印出各字母在26个字母表中的数值位置(比如a/A打印1,b/B打印2,。。。z/Z打印26等等)非字母不显示数值,就这样一行行打印显示,直到文件结束,最后结果存入文件w2.dat.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>

char s[100][80]; /*设定最多100行,每行80个字符,可更改*/
int line=0,s1[100][80],s2[100];

void str(void)
{ int i,j;
char c,*p;
for(i=0;i<line;i++)
{
p=s[i];
j=0;
while(*p)
{ if(isalpha(*p))
{ c=tolower(*p);
s1[i][j++]=c-'a'+1;
}
p++;
}
s2[i]=j;
}
}

main()
{
int i=0,j;
char *p;
FILE *fp;
if((fp=fopen("w1.dat","r"))==NULL)
{
printf("Cannot open file w1.dat or the file does not exit!");
getch();
exit(0);
}
while(fgets(s[i],80,fp)!=NULL)
{ p=strchr(s[i],'\n'); /*处理每一行的结尾*/
if(p) *p=0;
i++;
}
line=i;
fclose(fp);
str();
fp=fopen("w2.dat","w");
for(i=0;i<line;i++)
{ printf("\n\n\n%s\n",s[i]);
for(j=0;j<s2[i];j++)
{ printf("%-4d",s1[i][j]);
fprintf(fp,"%-4d",s1[i][j]);
}
}
fclose(fp);
getch();
}

w1.dat文件的一个参考内容如下:
animal is a -888-666- kind of BEAST.
the man sitting there()*&^ IS MY OLD FRIEND.
Are you ok? _*&#!he asked me.!@#$%^
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式