c语言 从文本文件中读取汉字和数字的信息并存入相应变量中,并去除换行符的代码
时间: 2024-10-21 20:02:26 浏览: 20
C语言中getchar, gets, 和 scanf 三种不同函数的区别
在C语言中,你可以使用fscanf函数从文本文件中逐个读取字符并判断是否是汉字或数字。这里是一个基本的例子,假设我们已经打开了名为"filename.txt"的文件:
```c
#include <stdio.h>
#include <ctype.h> // 包含ctype.h库用于处理字符
#define MAX_LINE_LENGTH 100 // 设置最大行长度
int main() {
FILE *fp;
char line[MAX_LINE_LENGTH];
char ch; // 存储当前字符
int digit = 0; // 初始化数字变量
char hanzi[6]; // 汉字最多由5个字节表示,加一位结束标志
fp = fopen("filename.txt", "r"); // 打开文件
if (fp == NULL) {
printf("Failed to open file.\n");
return 1;
}
while (!feof(fp)) { // 遍历文件内容直到文件结尾
ch = fgetc(fp); // 读取一个字符
// 如果是数字,转换成整数并存储
if (isdigit(ch)) {
digit = digit * 10 + (ch - '0');
}
// 如果是汉字,先存储到临时数组hanzi中,注意汉字最多由5个字节表示(GB2312编码)
else if (isgraph(ch) && isascii(ch)) {
hanzi[5] = ch;
hanzi[4] = ch - 'a' + 0x80; // 将小写字母转为ASCII码范围内的汉字
hanzi[3] = ch - 'A' + 0xA0; // 同理,大写字母
hanzi[2] = ch - '0' + 0xC0; // 数字0-9
hanzi[1] = ch - 'A' + 0x40; // 大写字母A-Z
hanzi[0] = ch; // 原始字符,作为结束标志
}
// 当遇到空格或非文字数字字符时,检查并处理结果
if (!isspace(ch) && ch != '\n') { // 去除换行符
line[strlen(line)] = ch; // 如果不是空格,将字符添加到line字符串中
line[++strlen(line)] = '\0'; // 结束字符串
// 对于数字和汉字,分别处理
if (isdigit(digit)) {
printf("Digit read: %d\n", digit);
digit = 0; // 重置数字变量
} else if (strcmp(hanzi, "汉字") == 0) {
printf("Hanzi read: %s\n", hanzi);
}
}
}
fclose(fp); // 关闭文件
return 0;
}
```
阅读全文