【问题标题】:Issue with scanning a character from a file从文件中扫描字符的问题
【发布时间】:2015-10-18 15:19:17
【问题描述】:

在从文件中扫描字符的问题上,我的代码出现了问题。这是我的代码:

int main(int argc, char **argv){
    FILE *ifp = fopen("input.txt", "r");

    char check, key;
    char buffer[MAX_STRING_LENGTH + 1];
    char str[MAX_STRING_LENGTH + 1];
    node *head = NULL;

    fscanf(ifp, "%s", buffer);
    head = stringToList(buffer);

    while(fscanf(ifp, "%c", &check) != EOF){
        switch(check){
        case '@':
            //fflush(stdin);            //this is commented out because fflush
            fscanf(ifp, "%c", &key);         //did not seem to solve the issue
            fscanf(ifp, "%s", str);
            printf("%c, %s\n", key, str);
            head = replaceChar(head, key, str);
            break;

        //more cases follow, but they are irrelevant to this question

我的问题是,我的程序在调用时无法扫描要键入的字符。例如,当文件中特定案例的输入说,

@ r ri

打印语句给出以下内容:

( ), (r)

打印语句中有一个空格,应该打印 r,据我所知,字符正在扫描到字符串中。因此,该程序功能失调。我需要知道如何正确扫描这个角色。谢谢。

【问题讨论】:

  • fscanf(ifp, " %c", &key); 然后fscanf(ifp, " %s", str); 注意额外的spaces。在阅读'@' 之后,您正在阅读' '
  • 哇,我不敢相信这有效。谢谢。
  • 当你一次读一个字符时,你真的会读每个字符....你为什么要歧视可怜的小space?它也是一个char(0x20 或 30 十进制)。你可能会让它感觉不好,给它一个复杂的东西:)

标签: c file input character


【解决方案1】:

fscanf(ifp, " %c", &key); 然后fscanf(ifp, " %s", str); 注意额外的spaces。在阅读'@' 之后,您正在阅读' '。 – David C. Rankin

这已经回答了我的问题。很奇怪,C 会被这么简单的东西搞砸。

【讨论】:

  • 注意:"%s" 之前的空格是不需要的,也不是问题/解决方案的一部分。
猜你喜欢
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多