在 C 中读取带空格的文件 .txt
Reading a file .txt in C with blank spaces
我试图用 C 打开一个简单的 txt 文件,如下图所示。
list example
输入文字:
Name Sex Age Dad Mom
Gabriel M 58 George Claire
Louise F 44
Pablo M 19 David Maria
我的疑问是,我怎样才能识别列表中的空白并正确跳转到另一行。
这是我的代码:
#include <stdio.h>
int main() {
FILE *cfPtr;
if ((cfPtr = fopen("clients.txt", "r")) == NULL) {
puts("The file can't be open");
} else {
char name[20];
char sex[4];
int age;
char dad[20];
char mom[20];
char line[300];
printf("%-10s%-10s%-10s%-10s%-10s\n","Name","Sex","Age","Dad","Mom");
fgets(line,300,cfPtr);
fscanf(cfPtr,"%10s%10s%d%12s%12s",name,sex,&age,dad,mom);
while (!feof(cfPtr)) {
printf("%-10s%-10s%d%12s%12s\n",name,sex,age,dad,mom);
fscanf(cfPtr,"%19s%3s%d%12s%12s",name,sex,&age,dad,mom);
}
fclose(cfPtr);
}
return 0;
}
如果我把所有的空格都填上就没问题了...
printf("%-10s%-10s%d%12s%12s\n",name,sex,age,dad,mom);
fscanf(cfPtr,"%19s%3s%d%12s%12s",name,sex,&age,dad,mom);
更改顺序为先阅读,后打印。
理想情况下,文件中的数据应该用逗号、制表符或其他一些字符分隔。如果数据在固定列中,则将所有内容都读取为文本(包括整数),然后稍后将整数转换为文本。
同时检查 fscanf
的 return 值,如果结果不是 5,则某些字段丢失。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
FILE *cfPtr = fopen("clients.txt", "r");
if(cfPtr == NULL)
{
puts("The file can't be open");
return 0;
}
char name[11], sex[11], dad[11], mom[11], line[300];
int age;
fgets(line, sizeof(line), cfPtr); //skip the first line
while(fgets(line, sizeof(line), cfPtr))
{
if(5 == sscanf(line, "%10s%10s%10d%10s%10s", name, sex, &age, dad, mom))
printf("%s, %s, %d, %s, %s\n", name, sex, age, dad, mom);
}
fclose(cfPtr);
return 0;
}
编辑,更改sscan
格式以直接读取整数,将缓冲区分配更改为 11,这是所有需要的。
我试图用 C 打开一个简单的 txt 文件,如下图所示。
list example
输入文字:
Name Sex Age Dad Mom
Gabriel M 58 George Claire
Louise F 44
Pablo M 19 David Maria
我的疑问是,我怎样才能识别列表中的空白并正确跳转到另一行。
这是我的代码:
#include <stdio.h>
int main() {
FILE *cfPtr;
if ((cfPtr = fopen("clients.txt", "r")) == NULL) {
puts("The file can't be open");
} else {
char name[20];
char sex[4];
int age;
char dad[20];
char mom[20];
char line[300];
printf("%-10s%-10s%-10s%-10s%-10s\n","Name","Sex","Age","Dad","Mom");
fgets(line,300,cfPtr);
fscanf(cfPtr,"%10s%10s%d%12s%12s",name,sex,&age,dad,mom);
while (!feof(cfPtr)) {
printf("%-10s%-10s%d%12s%12s\n",name,sex,age,dad,mom);
fscanf(cfPtr,"%19s%3s%d%12s%12s",name,sex,&age,dad,mom);
}
fclose(cfPtr);
}
return 0;
}
如果我把所有的空格都填上就没问题了...
printf("%-10s%-10s%d%12s%12s\n",name,sex,age,dad,mom); fscanf(cfPtr,"%19s%3s%d%12s%12s",name,sex,&age,dad,mom);
更改顺序为先阅读,后打印。
理想情况下,文件中的数据应该用逗号、制表符或其他一些字符分隔。如果数据在固定列中,则将所有内容都读取为文本(包括整数),然后稍后将整数转换为文本。
同时检查 fscanf
的 return 值,如果结果不是 5,则某些字段丢失。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
FILE *cfPtr = fopen("clients.txt", "r");
if(cfPtr == NULL)
{
puts("The file can't be open");
return 0;
}
char name[11], sex[11], dad[11], mom[11], line[300];
int age;
fgets(line, sizeof(line), cfPtr); //skip the first line
while(fgets(line, sizeof(line), cfPtr))
{
if(5 == sscanf(line, "%10s%10s%10d%10s%10s", name, sex, &age, dad, mom))
printf("%s, %s, %d, %s, %s\n", name, sex, age, dad, mom);
}
fclose(cfPtr);
return 0;
}
编辑,更改sscan
格式以直接读取整数,将缓冲区分配更改为 11,这是所有需要的。