计算用户输入整数与c程序中的文本文件匹配

时间:2014-10-14 15:10:58

标签: c text fopen

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

int main()
{
FILE *file;
int word;
int num,num2;
int numcount1=0,numcount2=0;

printf("Please enter a keys: ");
if (scanf("%d %d", &num, &num2)==2 ){
} else {
    printf("Error:Must two integers");
}

file=fopen("data.txt","r");

while ((word=fgetc(file))!=EOF){
    fprintf(stdout, "%c",word);
    if (word == num)  numcount1++;
    if (word == num2)  numcount2++;
}
printf("'%d' is found %d times in the txt file\n",num,numcount1);
printf("'%d' is found %d times in the txt file\n",num2,numcount2);
fclose(file);
return 0;
}

data.txt中

1 5 30
9 8 77
3 1 15
2 3 8

我想要输出

[1111@11111 ~]$ ./count
 Please enter a keys: 1 2
'1' is found 2 times in txt file
'2' is found 1 times in txt file

我的问题是输入&#39; 1&#39;无法计算。 我试着测试(word ==&#39; 1&#39;)numcount可以计算,但也计算&#39; 15&#39;整数,共3次,也不是2次

谢谢!

2 个答案:

答案 0 :(得分:0)

while (fscanf(file, "%d", &word)!=EOF){
    if (word == num)  numcount1++;
    if (word == num2)  numcount2++;
}

答案 1 :(得分:0)

如果您的问题只是计算文件中密钥的出现次数(只是整数),以下方法对我来说似乎很好。

使用key读取unordered_map中的完整文件,将该数字和值作为其计数。这样你的搜索就会很有效,即O(1)。这肯定比在用户的每个输入上搜索文件要好得多。

每当文件内容发生变化时,只需将其重新加载到地图中即可。