c语言fgetc能读取空格吗,[求助]用fgetc()读取文件时遇到的问题~~

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

文件input.txt

Today is sunday.

Our beautiful pools had turned brownish          green!

Needless to say, for the rest of the weekend, we had to stay indoor watching even the sillest TV.

output

======

Today

is

sunday

.

\n

\n

Our

。。。。。(省略)

say

,

TV

.

我要读取文件中的字符串为一个word node,逗号,新一行和句号也本别为一个word node.

读取字符串为一个word node没问题,怎样把 逗号(,),新一行(\n)和句号(.)也变成一个word node

我的链表没问题,所以我只贴有问题的部分

int i, counter = 1, found = 0;

char ch, *word;

FILE* fp;

while(!feof(fp))

{

i = 0;

word = malloc(sizeof(char) * SIZE);

while((ch = fgetc(fp)) != EOF)

{

if(isalpha((int)ch))

{

word[i++] = ch;

}

else

{

// 如果我在这写if(ch == ',' || ch == '.'|| ch == '\n')word[i++] = ch;结果会显示成字符串和符号成为一个node

word[i] = '\0';

if(i)

break;

}

}

if(*word == '\0')

break;

counter++;

。。。。。省略。。。。。。

}

非常感谢~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要了解二叉树的存储方式。常见的有两种方式:链式存储和顺序存储。 链式存储方式是指使用指针来表示二叉树的节点之间的关系,每个节点包含一个数据域和两个指针域,分别指向左子树和右子树。 顺序存储方式是指使用数组来表示二叉树的节点之间的关系,按照某种规则将节点存储在数组中,父节点的下标为i,左子树的下标为2i,右子树的下标为2i+1。 下面是使用链式存储方式来读取一个二叉树的示例代码: ```c #include <stdio.h> #include <stdlib.h> typedef struct TreeNode { char data; // 节点数据 struct TreeNode *left; // 左子树指针 struct TreeNode *right; // 右子树指针 } TreeNode; // 从文件中读取一个字符,直到读到非空格字符 char readChar(FILE *fp) { char c; do { c = fgetc(fp); } while (c == ' ' || c == '\n' || c == '\r'); // 忽略空格、换行和回车 return c; } // 从文件中读取一个二叉树 TreeNode* readBinaryTree(FILE *fp) { char c = readChar(fp); if (c == '#') { // 空节点 return NULL; } else { TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode)); node->data = c; node->left = readBinaryTree(fp); // 递归读取左子树 node->right = readBinaryTree(fp); // 递归读取右子树 return node; } } // 中序遍历二叉树,用于检查读取结果是否正确 void inorderTraversal(TreeNode *root) { if (root != NULL) { inorderTraversal(root->left); printf("%c ", root->data); inorderTraversal(root->right); } } int main() { FILE *fp = fopen("tree.txt", "r"); if (fp == NULL) { printf("Error: cannot open file.\n"); exit(1); } TreeNode *root = readBinaryTree(fp); fclose(fp); inorderTraversal(root); return 0; } ``` 假设tree.txt文件内容为: ``` A B # # C D # # ``` 则读取结果为: ``` B A D C ``` 说明读取成功。 这里使用了递归的方式来读取二叉树,对于每个节点,先读取一个字符,如果是#表示空节点,否则创建一个新节点,并递归读取左右子树。由于递归的过程中需要不断读取文件,因此需要一个辅助函数readChar来实现从文件中读取一个字符并忽略空格、换行和回车的功能。最后使用中序遍历来检查读取结果是否正确。 当然,也可以使用其他方式来存储二叉树,比如使用顺序存储方式,这需要根据具体的存储规则来编写读取代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值