【问题标题】:Separating a line of text into two arrays in C在C中将一行文本分成两个数组
【发布时间】:2015-09-25 13:41:13
【问题描述】:

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

你好;你好

再见;再见

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

char[] 英文;

char[] 跨度;

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

 int currentChar;
 while( currentChar != EOF ) {

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

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


}`

当我打印出 eng 时,它给了我两个词,但没有;所以输出看起来像

你好

再见

我是 C 新手,所以任何提示都会有所帮助

【问题讨论】:

  • 一个char数组的声明是:char eng[MAX_NUM_WORDS][MAX_WORD_LEN]不是char[] eng;`

标签: c arrays scanf


【解决方案1】:

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

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

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

【讨论】:

  • 1) 由于不使用 "%99[^;];%99s" 之类的东西,代码很容易像 gets() 那样出现缓冲区溢出 2) 由于不考虑尾随 '\n',下一个 eng 可能会以 @ 开头987654326@.
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    相关资源
    最近更新 更多