Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中将一行文本分成两个数组_C_Arrays_Scanf - Fatal编程技术网

在C语言中将一行文本分成两个数组

在C语言中将一行文本分成两个数组,c,arrays,scanf,C,Arrays,Scanf,我正在编写一个翻译程序,提供一个英文转换的文本文件。每行文本看起来都像 你好,;你好 再见;阿迪奥斯 我想把这两个单词分成两个不同的字符数组 char[]eng char[]span 现在我必须读入文件并将每个单词存储在数组中 int currentChar; while( currentChar != EOF ) { fscanf(inFile, "%[^;]c, %c", eng, span); printf("%s", eng); currentChar =

我正在编写一个翻译程序,提供一个英文转换的文本文件。每行文本看起来都像

你好,;你好

再见;阿迪奥斯

我想把这两个单词分成两个不同的字符数组

char[]eng

char[]span

现在我必须读入文件并将每个单词存储在数组中

 int currentChar;
 while( currentChar != EOF ) {

    fscanf(inFile, "%[^;]c, %c", eng, span);

    printf("%s", eng);
    currentChar = fgetc( inFile );


}`
当我打印出英语时,它会返回两个单词,但没有;所以输出看起来像

hellohola

再见


我是C新手,所以任何类型的提示都会对初学者有所帮助,您可以这样修改fscanf行:

fscanf(inFile, "%[^;];%s", eng, span);

不过,您仍然需要考虑可能的缓冲区溢出或输入行格式错误。

对于初学者,您可以这样修改fscanf行:

fscanf(inFile, "%[^;];%s", eng, span);

不过,您仍然需要考虑可能的缓冲区溢出或输入行格式错误。

我认为这就是您要寻找的,并且至少可以让您了解如何使用您提供的输入格式的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;
    }
}

我认为这就是您正在寻找的,并且至少会让您了解如何使用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;
    }
}

1不使用类似于%99[^;];%99s时,代码容易出现缓冲区溢出,如gets 2不计算尾随的“\n”,下一个eng可能会以“\n”开头。1不使用%99[^;];%99s,代码很容易发生缓冲区溢出,就像gets 2一样,因为不计算尾随的“\n”,下一个eng很可能以“\n”开头。字符数组的声明是:char eng[MAX_NUM_WORDS][MAX_WORD LEN]not char[]eng`char数组的声明是:char eng[MAX\u NUM\u WORDS][MAX\u WORD\u LEN]Not char[]eng`