只读文件中的某些字符串

时间:2015-01-24 13:29:20

标签: c file random

我想使用rand()生成随机名称并将每个名称链接到一个整数(例如,如果是Daniel,则为1,对于Sarah,则为2,依此类推)。我写了函数void random_name ()并使用switch链接返回名称的每个数字rand(),但现在我想使用文件执行此操作。我怎样才能从文件中读取例如以1开头的行?谢谢:))

1 个答案:

答案 0 :(得分:1)

如果您希望在每一行上都有一个数字和一个名称,则必须阅读每一行以查找随机生成的数字。实现这一目标的一种方法是:

srand(time(0));
// random number between 1 and 10
int r = rand() % 10 + 1;
char line[128];
char name[64];
int number;
FILE* file = fopen("names.txt", "r");
if(file) {
    // loop while not EOF 
    while(fgets(line, sizeof line, file) != NULL) {
        // scan the line for a number and a name
        sscanf(line, "%d %s", &number, name);
        // if the number is equal to the random one break the loop
        if(number == r) {
            printf("random name is %s\n", name);
            break;
        }
    }
    fclose(file);
}

如果每行只有一个名称,并且至少有10个不同的名称,则可以使用:

srand(time(0));
int r = rand() % 10 + 1;
char line[128];
FILE* file = fopen("names.txt", "r");
if(file) {
    // loop while not EOF and r > 0, when r is 0 then we have
    // read r amount of lines from the file
    while(fgets(line, sizeof line, file) != NULL && --r);
    printf("random name is %s\n", line);
    fclose(file);
}