使用c中的fscanf()从格式化的测试文件中读取

时间:2017-11-15 09:57:47

标签: c file-io

这是文本文件

Username:user1  Password:pass1
Username:user2  Password:pass2

我想从文本中读取用户名和密码。问题是没有办法改变文本的格式。我试着读,但由于冒号(:)之间没有空格,它给整个username:user1作为字符串,但我只想要user1。我提到this问题,但由于冒号之间没有空格,所以没有帮助。

我试过了:

 while ((fscanf(fp,"Username:%s Password:%s",username,password))!=EOF)

但是在user1和loop永远不会结束之后它会给出许多未定义的字符。

2 个答案:

答案 0 :(得分:1)

请尝试以下代码:

#include <stdio.h>
#include <string.h>

int main (int argc, char *argv[])
{
    char username[128];
    char password[128];
    FILE *fp;
    int ret;

    fp = fopen("read.txt", "r");
    if (!fp) {
        printf("Failed to open a file\n");
        return 1;
    }

    while (1) {
        ret = fscanf(fp, "Username:%s Password:%s\n",username,password);
        if (ret == EOF)
            break;
        if (ret == 2)
            printf("%s %s\n", username, password);
        else {
            printf("%d\n", ret);
            perror("fscanf:");
            break;
        }
    }

    fclose(fp);
    return 0;
}

答案 1 :(得分:0)

我会使用这个算法:

  1. 阅读char时不读&#39;&#39;

  2. 开始存储用户名var上的所有下一个字符,而char读取是!=&#39; &#39;

  3. 删除用户名字符串

  4. 上的最后一个空格
  5. 重复步骤1.

  6. 与第2步相同,但现在我们将读取的数据存储在密码值中,而读取的字符是!=&#39;&#39; \ n&#39;

  7. 重复一遍!文件结尾