高手来帮忙找下这个程序的问题

来源:百度知道 编辑:UC知道 时间:2024/07/16 01:34:02
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
struct word //定义储存单词及出现次数的结构体
{
char vocabulary[25];
int num;
word *next;
};
void main ()
{
int findwords(word *head,char d[]); //声明比较单词的函数
void newwords(word *head,char d[]); //声明创建新单词节点的函数
void printwords(word *head); //声明节点打印函数
void searchwords(word *head,char str[]); //声明节点查找函数
char c,d[25],str[25];
int i=0,flag=0,sum;
word *head;
head=(word *)malloc(sizeof(word)); //创建头节点
head->next=NULL;
while(scanf("%c",&c),c!='\n')
{
if(c>=65&&c<=90||c>=97&&c<=122) //将单词输入字符串d
{
d[i]=c;
i++;
flag=1;
}
else
{
d[i]='\0'; //输入第一个非字母后结束输入
if(flag==1)
{
if(strlen(d)!=0) //若循环输入非字符字符串长度为

你的findwords函数return 1好像位置放错了

你关键的错误在这里:“ while(scanf("%c",&c),c!='\n')” 你的本意是想循环输入字符,可是 scanf("%c",&c) 和 c!='\n' 是两条独立的语句,是不会同时判断的。另外你的c是个字符,而不是字符串或字符数组。所以,你最好先声明一个字符串c,然后输入一个字符串到c,这个时候再开始判断c[i]。
例如,输入字符串:lsjf s fjlsjf s jflsj lsgl;afjlsf lsfjsf lsjweo soe
把这个字符串放到c中。然后再用判断语句判断出每一个单词,把判断出的单词放在d中,最后插入链表。你要知道对字符串的处理是按照字符数组的处理进行的。在这个例子中,c[0]=l, c[1]=s,..c[4]=空格,即为一个单词,放入d中,插入链表,然后继续判断后面的。重复上述循环即可。