我正在编写一个翻译程序,给出一个英文转换的文本文件。每行文字看起来都像
您好; HOLA
再见; ADIOS
我想将这两个单词分成两个不同的char数组
char [] eng;
char [] span;
现在我必须读入文件并将每个单词存储在数组中
int currentChar;
while( currentChar != EOF ) {
fscanf(inFile, "%[^;]c, %c", eng, span);
printf("%s", eng);
currentChar = fgetc( inFile );
}`
当我打印出英文时,它会让我回复这两个词,但没有;所以输出看起来像
hellohola
goodbyeadiós
我是C的新手,所以任何提示都会有所帮助
答案 0 :(得分:3)
对于初学者,您可以像这样修改fscanf行:
fscanf(inFile, "%[^;];%s", eng, span);
但是,您仍然需要考虑可能的缓冲区溢出或格式错误的输入行。
答案 1 :(得分:1)
我认为这是您正在寻找的内容,至少会让您了解如何根据您提供的输入格式使用fscanf格式字符串。您还需要添加逻辑以防止缓冲区溢出。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void getTwoLanguages(FILE *inFile, char **language1, char **language2);
int main()
{
char *en[1024], *sp[1024];
int i;
// Get the phrase pairs
getTwoLanguages(stdin, en, sp);
// Output
for (i = 0; en[i] && sp[i]; i++)
printf("%s <-> %s\n", en[i], sp[i]);
// Cleanup
for (i = 0; en[i]; i++)
free(en[i]);
for (i = 0; sp[i]; i++)
free(sp[i]);
return 0;
}
void getTwoLanguages(FILE *inFile, char **language1, char **language2)
{
char working1[256], working2[256];
while (!feof(inFile)
&& fscanf(inFile, "%[^;\n\r]%*[;\n\r]%[^;\n\r]%*[;\n\r]", working1, working2) == 2)
{
/* Save the token and NULL the next one to indicate EOL */
*language1++ = strdup(working1);
*language1 = NULL;
*language2++ = strdup(working2);
*language2 = NULL;
}
}