C 如何将字对从文件存储到字符串?

C 如何将字对从文件存储到字符串?,c,C,我必须从输入文件中读取数据,并将字对存储在动态分配的字符串中。我们必须创建一个typedef结构,并分别存储第一个和第二个单词 该文件如下所示: car couch \n golf ball\n mechanic repair\n 这两个词对之间用空格隔开,但在词对前后可以有尽可能多的hitespace 最后我应该有两个字符串 “汽车高尔夫技工” 和 “沙发球修复” 正如你所看到的,我完全不知道如何实现这样的事情。非常感谢任何帮助我不建议在(!feof(fp))时使用 如果文件

我必须从输入文件中读取数据,并将字对存储在动态分配的字符串中。我们必须创建一个typedef结构,并分别存储第一个和第二个单词

该文件如下所示:

car couch   \n
  golf ball\n   
mechanic repair\n 
这两个词对之间用空格隔开,但在词对前后可以有尽可能多的hitespace

最后我应该有两个字符串 “汽车高尔夫技工” 和 “沙发球修复”


正如你所看到的,我完全不知道如何实现这样的事情。非常感谢任何帮助

我不建议在(!feof(fp))时使用

如果文件的长度是可变的,我会计算所有的换行(使用
fgetc
或您喜欢的方式),然后返回到开头。一旦你有了行数,你就可以遍历它,然后使用
fscanf
来获得你的词对

我相信1_单词是一个占位符,但这在C语言中是一个无效的标识符,并且不是您之前声明的(
first_单词

voc\u对[count]。第一个\u字=1个\u字
是正确的方法,您只需记住在插入第一个单词和第二个单词后增加
count

我还建议删除该
filename
变量或将其声明移动到宏中,例如
#define filename argv[1]
,或者只定义一个具有filename参数索引的常量

您也不应该在
结构的开头使用
,或者在C中使用任何类似的东西,因为它是保留的,通常用于操作系统代码或其他您不想弄乱的东西

关于在单词大于10个字符时放大字符串,您可以使用realloc并为单词动态分配
char*
,并插入您自己的零终止符。您可以剪裁空白字符并插入自己的分隔符,然后将每个字符串读入数组

要跳过额外的空格,我将创建一个单独的函数,使用
fgetc
和一个字符变量和一个位置变量,在每个新字符上增加位置变量。然后可以使用
isspace
检查它是否为空白,然后丢弃该字符


希望这有帮助

此代码不可编译(变量名不能以数字开头)。请显示compiles.cyberc33的代码,是谁或什么文本建议的代码,如
while(!feof(fp))
typedef struct _VocabularyCouple_
  {
    char* first_word;
    char* second_word;
  } VocabCouple;

int main(int argc, char* argv[])
{
  FILE *fp;
  char* filename;
  filename = argv[1];
  fp = fopen(filename,"r");

  VocabCouple voc_pair[10];

  int count = 0;

  char first_word[10];
  char second_word[10]; //the strings have to start with size of 10 
                   // and then if neede be enlarged by 10

  while(!feof(fp))
  {
    fscanf(fp," %s %s", 1_word, 2_word); // to skip whitespaces ?
    // I don't know how to enlarge if the word is bigger than 10

    voc_pair[count].first_word = 1_word; //?? don't know if right method
  }
}