对于C来说,我很遗憾是一个完整的新手。我正在尝试读取一个格式化的文本文件
one two three
two one three
three one
我需要读取一行中的第一个字符串(所以如果第一行是"一个",那么我做一个与变量的比较。如果匹配那么我需要使用其余的字符串,所以如果匹配字符串1我需要使用" 2"和#34; 3"(分别作为他们自己的字符串)。 如果没有匹配,我会转到下一行,依此类推。
这是我到目前为止的代码,但它似乎没有用。在评论中我认为代码正在做什么。
char temp[] = "three";
while(!feof(file)){ //Go until end of file is reached
fgets(line, 100, file); //Grab the line
string_token = strtok(line, " "); //Tokenize the line
strcpy (compare_to, string_token); //Copy first token into a string variable
if (strcmp(compare_to, temp) == 0){ //Compare string with a predefined temp variable
while (string_token != NULL) { //If it was a match then we go until tokens end (which would be end of the line from a file)
printf("%s has the following: %s\n", temp,compare_to );
string_token = strtok(NULL, " ");
}
}
}
答案 0 :(得分:1)
逐行读取文件,读取第一个字符串,如果匹配则使用其余行,否则移至下一行
在所有情况下,代码都需要读取整行 - 这只是一个如何使用输入的问题。
请勿使用此problematic code
// while(!feof(file)){
// fgets(line, 100, file);
相反
while(fgets(line, sizeof line, file)) {
现在解析字符串,将\ n添加到分隔列表。
int count = 0;
string_token = strtok(line, " \n");
// compare the the i'th `compare_to[i]` or
// what ever fulfills "then I do a comparison with a variable"
if (string_token != NULL && strcmp(compare_to[i], string_token) == 0){
printf("<%s>\n", string_token );
string_token = strtok(NULL, " \n");
count++;
}
}
答案 1 :(得分:0)
你可以这样做:
char first_str[128];
while(fgets(line, 100, file) != NULL)
{
sscanf(line, "%s", first_str);
if(strcmp(first_str, "your_str") == 0)
{
// match
// so use result of the line
}
}
基本上,您正在阅读整行,然后使用sscanf
检查第一个字符串,然后根据您的条件继续进行。
编辑:确保您的数组长度足以容纳字符串。