如何在.txt文件C中搜索特定的字符串和整数并使用它们?

时间:2016-06-25 17:04:51

标签: c string file search integer

这段代码是一个关于文件I / O的小型学习经验,我还没有完成:

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

int main()
{
    FILE *fP;

    char so_name[64];
    char user_name[64];
    int number;
    char continue_button;

    time_t t;

    system("TITLE Love-0-meter");
    system("COLOR 4D");

    srand((unsigned) time(&t));
    number = (rand() %100);

    printf("Hi and welcome to the love-o-meter, please fill in the details and see how much you and your SO"
       " love each other!\n\nHave you used this program before?(Y/N)");
    do
    {
        scanf(" %c", &continue_button);

    }while(continue_button != 'n' && continue_button != 'N' && continue_button != 'Y' && continue_button != 'y');

    system("CLS");
    printf("Enter your SO's name: ");
    scanf(" %s", so_name);
    printf("Enter your name: ");
    scanf(" %s", user_name);
    printf("\n%s and %s, you love each other %d%%", so_name, user_name, number);

    if(continue_button == 'N' || continue_button == 'n')
    {
        fP = fopen("Love-o-meter.txt", "w");
    }
    else
    {
        fP = fopen("Love-o-meter.txt", "a");
    }
    fprintf(fP, "%s %s %i\n", so_name, user_name, number);
    fclose(fP);

    return 0;
}

基本上,用户必须输入2个名称并将其与随机数一起保存在.txt文件中。但是在名称保存之前,程序必须检查它们之前是否以相同的顺序使用过,并且已经在文件中。如果之前确实使用过它们,程序不能生成新的数字,而是使用与2个名称一起保存的数字并将其打印出来。

我一整天都在阅读,但我无法弄清楚如何以及如何实现该程序能够读取以前保存的名称和数字,并在找到匹配时使用它们。

3 个答案:

答案 0 :(得分:0)

您可以将您的位置保存在文件中,从头开始扫描,然后返回保存位置。

char name1[256], name2[256];
int val;
size_t pos = ftell(fP);
rewind(fP);
while(fscanf(fp, "%s %s %d", name1, name2, &val) == 3) {
    // compare everything you need
}
fseek(fP, pos, SEEK_SET)

我希望我理解你:)

答案 1 :(得分:0)

您要做的是解析文件。为了在文本文件中使用字符串执行此操作,您需要一些方法来了解在何处查找为名称存储的名称和结果。

正如之前的回答所提出的,使用职位是你应该真正研究的问题。除此之外,您可能希望使用空格或字符分隔名称和结果,并使用换行符分隔每个新条目。您可以使用此功能,结合保存的位置,告诉您输入的内容,以及您是否正在阅读姓名或结果。

此外,您应该阅读“fopen&#39;文件,例如this

我希望这就是你所寻找的。

答案 2 :(得分:0)

  

我整天都在阅读,但我无法弄清楚如何以及如何做   实现程序能够读取以前保存的名称和   数字,如果找到匹配则使用它们。

您已经正确描述了需要完成的工作。为了做到这一点,你必须

  • 以允许阅读的模式打开文件(a+代替a
  • 读取保存的姓名和号码e。 G。 fscanf()
  • 将其与strcmp()
  • 输入的名称进行比较
  • 如果名称匹配,则分配已保存的号码

- 所以改变

    printf("\n%s and %s, you love each other %d%%", so_name, user_name, number);

    if(continue_button == 'N' || continue_button == 'n')
    {
        fP = fopen("Love-o-meter.txt", "w");
    }
    else
    {
        fP = fopen("Love-o-meter.txt", "a");
    }
    fprintf(fP, "%s %s %i\n", so_name, user_name, number);

    if(continue_button == 'N' || continue_button == 'n')
    {
        fP = fopen("Love-o-meter.txt", "w");
    }
    else
    {
        char so_used[64];
        char user_used[64];
        int nuused;
        fP = fopen("Love-o-meter.txt", "a+");   // append + read
        while (fscanf(fP, "%s %s %i\n", so_used, user_used, &nuused) == 3)
            if (!strcmp(so_used, so_name) && !strcmp(user_used, user_name))
            {
                number = nuused;
                goto out;
            }
    }
    fprintf(fP, "%s %s %i\n", so_name, user_name, number);
out:
    printf("%s and %s, you love each other %d%%\n", so_name, user_name, number);