如何创建从文件读取的字符的链接列表?C语言

如何创建从文件读取的字符的链接列表?C语言,c,C,所以我有一个家庭作业,我必须把一个文件中的文本翻译成欧洲英语,但我被困在了必须创建一个字符链接列表的部分。我的代码中似乎缺少什么?我仍在试图理解链表是如何工作的,所以如果下面的代码写得不好,我深表歉意 我还想问一些关于如何实现检查每个字符并应用欧洲英语规则的功能的提示 #include <stdio.h> #include <stdlib.h> void file_contents(); void converted_file(); FILE *fp; char

所以我有一个家庭作业,我必须把一个文件中的文本翻译成欧洲英语,但我被困在了必须创建一个字符链接列表的部分。我的代码中似乎缺少什么?我仍在试图理解链表是如何工作的,所以如果下面的代码写得不好,我深表歉意

我还想问一些关于如何实现检查每个字符并应用欧洲英语规则的功能的提示

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

void file_contents();
void converted_file();

FILE *fp;   
char c;
int i = 0;

struct L;
struct L
{
    char letter;
    struct L *next;
};


int main(int argc, char *argv[])
{
    if (argc != 2)
        printf("USAGE: %s <filename>", argv[0]);
    else
        {
            fp = fopen(argv[1], "r");
            if (fp == 0)
            {
                printf("Could not open file.\n");
                exit(1);
            }
            else
            {
            file_contents();
            converted_file();
                fclose(fp);
            }
        }
}
void file_contents()
{
    printf("\nYour file contains:\n\n");
        while ((c = getc(fp)) != EOF)
            printf("%c", c);
    printf("\n");
}
void converted_file()
{
    struct L *first, *tail, *head;
    printf("\nText converted in EuroEnglish:\n");
    while ((c = getc(fp)) != EOF)
    {
        first = (struct L *) malloc(sizeof(struct L));
        first->letter = c;
        first->next = NULL;
            if (tail == NULL)
                head = tail = first;
            else
            {
                tail->next = first;
            tail = first;
            }
    }

    while (first != NULL)
    {
    printf("%c", first->letter);
        first = first->next;
    }   
}
#包括
#包括
无效文件内容();
无效转换的_文件();
文件*fp;
字符c;
int i=0;
结构L;
结构L
{
字符字母;
结构L*下一步;
};
int main(int argc,char*argv[])
{
如果(argc!=2)
printf(“用法:%s”,argv[0]);
其他的
{
fp=fopen(argv[1],“r”);
如果(fp==0)
{
printf(“无法打开文件。\n”);
出口(1);
}
其他的
{
文件内容();
已转换的_文件();
fclose(fp);
}
}
}
无效文件内容()
{
printf(“\n您的文件包含:\n\n”);
而((c=getc(fp))!=EOF)
printf(“%c”,c);
printf(“\n”);
}
无效转换的\u文件()
{
结构L*第一,*尾,*头;
printf(“\n文本转换为欧洲英语:\n”);
而((c=getc(fp))!=EOF)
{
first=(结构L*)malloc(sizeof(结构L));
第一->字母=c;
first->next=NULL;
if(tail==NULL)
头=尾=第一;
其他的
{
尾部->下一个=第一个;
尾=第一;
}
}
while(第一个!=NULL)
{
printf(“%c”,第一个->字母);
第一个=第一个->下一个;
}   
}

最佳实践建议避免全球变暖。这里您使用了
fd
作为全局变量,并在main中打开了它。好的,直到那里。然后在
file\u contents
中一直读到文件末尾。它仍然很好,但文件指针现在位于文件末尾

当您尝试读入
转换的\u文件时,
getc
立即返回文件结尾。。。但由于
fd是全球性的,所以您没有注意到它。这可以通过使用
fseek(fd,0,SEEK_SET)回放文件来修复

转换的\u文件
中还有另一个倒带问题:读取所有字符后,
第一个
指向最后一个字符,但您尝试从那里开始显示文件内容。您应该插入
first=head此处,或将
while
lop替换为:

for(first=head; first!=NULL; first=first->next) {
    printf("%c", first->letter);
}

我没有尝试运行它,因此其他问题可能仍然存在…

是否要求您使用链接列表?也许是这样,因此您可以通过插入“u”节点将“颜色”转换为“颜色”。(我猜EuroEnglish的意思是英式英语。)否则,字符数组是存储字符串的常用方式。是的,我要求使用链表。建议您初始化
。查找并使用编译器设置为您提供有关使用未初始化值的警告。。。注意这些警告。建议
first=head<代码>转换的文件()
文件内容()
被吸干
fp
后可能什么都不做。好的,我会设法修改我的编译器设置。我明白了你的意思,当下面的答案发布时,你说
converted_file()
什么都不做。非常感谢。函数:
getc()
返回一个
int
,而不是
char
。所以这个声明
charc应该是
intc我明白你所说的,并在我的代码上尝试了它,但遗憾的是它仍然不起作用。但是谢谢你!我学到并意识到了很多东西。@Nick:我只是添加了这里描述的修复,得到了两倍于文本文件的内容。。。