提问人:angel666 提问时间:11/12/2019 最后编辑:theduckangel666 更新时间:11/12/2019 访问量:1383
C 程序搜索文件并将某些单词打印到新文件中
C Program to search a file and print certain words into a new file
问:
所以我需要编写一个 C 程序:
要求用户输入名字的字母
打开包含 1200 个名称列表的文件
在文件中搜索以用户输入的字母开头的所有名称
将所有找到的名称写入根据输入的字母命名的新文件中(例如 aNames.txt)
这是我到目前为止所拥有的。我可以获取原始文件并将所有名称放在一个数组中,但是我被困在如何获取用户输入并让它搜索每个名称的第一个字母上。我应该改用二维数组吗?对不起,我是新来的,请帮忙!谢谢
#define SIZE 1200
int main()
{
FILE *filePtr;
int i = 0;
char arrChar[SIZE];
char name[20];
char letter;
printf("Enter letter to search names that start with it:");
scanf("%c", letter);
filePtr = fopen("names.txt", "r");
while(fscanf(filePtr, "%s", arrChar) != EOF)
答:
0赞
JR87
11/12/2019
#1
#include <stdio.h>
char getNxtPntdVal(FILE *fPntr) {
char holder;
holder = fgetc(fPntr);
return holder;
}
void writeToFile(char c){
FILE *fpt = fopen("/home/jrinder/CLionProjects/untitled17/namesOut.txt","a");
fputc(c,fpt);
fclose(fpt);
}
int main() {
FILE *filePtr;
char arrChar[1200];
char name[20];
char letter;
char ch;
char ch2;
int charNum=0;
filePtr = fopen("/home/jrinder/CLionProjects/untitled17/names.txt","r");
printf("Letter:");
letter=getchar();
while((ch=fgetc(filePtr))!=EOF){
if(ch==letter && charNum ==0) {
ch2 = ch;
while (ch2 != '\n') {
printf("%c", ch2);
writeToFile(ch2);
ch2 = getNxtPntdVal(filePtr);
}
charNum=charNum+1;
printf("\n");
writeToFile('\n');
} else if(ch=='\n') {
charNum=0;
}else{
charNum=charNum+1;
}
}
}
评论
1赞
angel666
11/12/2019
这很有帮助,谢谢!看看我能做什么
1赞
Lily AB
11/12/2019
您好@JR87,即使正在搜索的名称不在名称的开头,当前的实现也不会打印名称。例如:如果名称是,字母是 ,则输出将显示 ,而不是完全忽略名称。letter
Macbeth
c
cbeth
1赞
angel666
11/12/2019
正如刚才指出的,当我按原样运行它并输入 A 时,它会打印每个包含 A 的名称,即使它不是以 A 开头。例如,它打印 Casey 和 Asey。在打印名称后,它也只会永远打印这些问号。有什么想法吗?我正试图自己弄清楚:')
0赞
JR87
11/12/2019
很好,我正在我的个人笔记本电脑上工作。工作电脑上没有 C 编译器。更新的代码
0赞
JR87
11/12/2019
再次更新。没有复制粘贴并制作了 type-o。应该很好
0赞
dash-o
11/12/2019
#2
替代解决方案,使用字符串 IO (fscanf, fprintf) 而不是逐个字符 IO (getchar/putchar):
还要安排声明 - 如果可能的话,推迟到需要的时间点 + 与初始值相结合;
#define SIZE 1200
int main()
{
char letter;
printf("Enter letter to search names that start with it:");
scanf("%c", letter);
FILE *filePtr = fopen("names.txt", "r");
if ( !filePtr ) ... // error handling
char out_name[20] = "?Names.txt" ;
name[0] = letter ;
FILE *out = fopen(out_name, "w") ;
if ( !out ) ... // error handling
char arrChar[SIZE];
while(fscanf(filePtr, "%s", arrChar) != EOF)
if ( arrChar[0] == letter ) fprintf(out, "%s\n", arrChar) ;
}
fclose(out) ;
fclose(filePtr) ;
评论
./myprogram > aNames.txt