永发信息网

帮忙看一下C语言的问题~

答案:1  悬赏:30  手机版
解决时间 2021-07-17 05:28
  • 提问者网友:难遇难求
  • 2021-07-16 12:12

#include<stdio.h>
#include<stdlib.h>
FILE *cp;
char fname[20],buf[100];
int NUM;
struct key
{
char word[10];
int count;
}keyword[]={"if",0,"char",0,"int",0,"else",0,"while",0,"return",0};
char *getword(FILE *fp)
{
int i=0;
char c;
while((c=getc(fp))!=EOF&&c==' '&&c=='\t'&&c=='n');
if(c==EOF)
return (NULL);
else
buf[i++]=c;
while((c=fgetc(fp))!=EOF &&c!=' '&&c!="\t'&&c!='\n')
buf[i++]=c;
buf[i]='\0';
return(buf);
}
void lookup(char *p)
{
int i;
char *q,*s;
for(i=0;i<NUM;i++)
{
q=&keyword[i].word[0];
s=p;
while(*s&&(*s=*q))
{
s++;
q++;
}
if(*s==*q)
{
keyword[i].count++;
break;
}
}
return;
}
void main()
{
int i;
char *word;
printf("input file name:");
scanf("%s",fname);
if((cp=fopen(fname,"r"))==NULL)
{
printf("file open error:%s\n",fname);
exit(0);
}
NUM=sizeof(keyword)/sizeof(struct key);
while((word=getword(cp))!=NULL)
lookup(word);
fclose(cp);
for(i=o;i<NUM;i++)
printf("keyword:%-20s count=%d\n",keyword[i].word,keyword[i].count);
}

题目是:以字符流的形式读入一个文件,从文件中检索出6种C语言的关键字,并统计、输出每种关键字在文件中出现的次数,本程序中的规定:单词是一个以空格或

'\t'、'\n'结束的字符串。

问题:1:这句话 while((c=getc(fp))!=EOF&&c==' '&&c=='\t'&&c=='n');
为什么不是C=fget(fp)?这句话到底说了个什么意思?

2:q=&keyword[i].word[0];为什么后面要加word[0]啊?

3:while(*s&&(*s=*q))
{
s++;
q++;
}说是把字符后面移动,我想问的I的值已经确定情况下,q再往下移??不懂
高手具体帮我分析下~

最佳答案
  • 五星知识达人网友:大漠
  • 2021-07-16 13:25
。。1个1个来。
1.while((c=getc(fp))!=EOF&&c==' '&&c=='\t'&&c=='n');。表示若获取的字符不是结尾符号或空格或

'\t'、'\n',那就继续读入。C=fget(fp)只是从fp中读入1个字符。。


2.keyword是一个结构体。word是这个结构体里的一个元素,并且是一个字符串。word[0]就是这个字符串的第一个字符。


3.它的功能就是字符后移。至于您的问题,我没看懂。。唉唉。理解能力有限啊。


4.sizeof()表示的是求()里面东西所占空间的大小。

keyword是一个结构体数组,而key是结构体。

除一下表示keyword里面有几个元素。。


。。


我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯