【问题标题】:fgetc not working C- returns same char repeatedlyfgetc 不工作 C- 重复返回相同的字符
【发布时间】:2013-11-23 03:12:32
【问题描述】:

我正在使用 C 语言并尝试读取文件并将 fgetc 返回的字符保存在数组中。问题是 fgetc 重复返回一个随机字符。在评论中标记位置。例如,“wwwwwwwwwwww...”或“@@@@@@@@@@@@@...”。任何帮助表示赞赏。这是函数:

void removeCategories(FILE *category, int *prodPrinted){

    char more[16] = { '\0' }, hidden[17] = { '\0' }, temp = '\0', mdn[] = { "More Data Needed" }, hnl[] = { "Hidden non listed" };

    int newLineCount = 0, i, ch = '\0';

    do{
        /*shift char in each list -> one*/

        for (i = 16; i > 0; i--){
            if (i <= 16){
                hidden[i] = hidden[i - 1];
            }
            if (i <= 15){
                more[i] = more[i - 1];
            }
        }

        more[0] = hidden[0] = ch = ( fgetc(category));
        printf("%c", &ch);       /*problem is here, prints random char repeatedly*/

        if (strcmp(more, mdn) == 0 || strcmp(hidden, hnl) == 0){
            prodPrinted[newLineCount] = 0;
                printf("%c", more[0]);                             /*test print*/
        }
        if (ch == '\n'){
            newLineCount++;
        }
    } while (ch != EOF);
}

【问题讨论】:

  • 应该是printf("%c", ch)
  • 请注意,您应该在尝试保存之前检查ch 是否为EOF。例如,if (ch == EOF) break; 在分配给ch 的行之后。

标签: c char fgetc


【解决方案1】:

问题在于您打印字符的调用

printf("%c", &ch);

这实际上是试图在堆栈上打印您的 ch 的地址(解释为 char)。

你想要的是:

printf("%c", ch);

它将正确打印该堆栈地址的内容(作为字符)

【讨论】:

    猜你喜欢
    • 2015-07-07
    • 2016-01-10
    • 1970-01-01
    • 2013-01-31
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    相关资源
    最近更新 更多