繁体   English   中英

C如何分割从.txt文件scanf中读取的变量

[英]C How to split variable read from .txt file scanf

有人可以帮我解决这个问题吗? 我有一个.txt文件,正在通过fopen使用C进行读取。 我可以将文本显示为屏幕上的变量,这很好。 但是,我从文件中读取的文本以逗号分隔。 如何将文本文件中的字符串分成两个变量而不是一个?

用户名密码

我希望最终输出是

var1 =用户名var2 =密码

这是我的代码。

inFile = fopen("logfile.txt", "r"); /*This opens the file */    
if (inFile == NULL)            /*Checks that the file exists*/ {        
    printf("\nThe file %c was not opened successfully.", fileName);     
    printf("\nPlease check that you entered the file name correctly.\n");       
    exit(1);    
}   
while (fscanf(inFile, "%s", text) !=EOF) /*Reads and displays the file*/        
    printf("%s\n", text);   
fclose(inFile);

修复方式

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

int main (void) { 
    char *s; 
    char test[50];
    int i=0;
    char str[] = 
        "username,password";
    printf ("%s\n", str); 
    s = strtok (str, ","); 
    // 
    while (s != NULL) { 
        printf ("%s\n", s); 

        s = strtok (NULL, ","); 

} 
        system("pause");
    return 0; 

} 

strtok函数就是您要寻找的

该过程是使用strtok函数。 该函数的作用是将定界符(在本例中为, )更改为\\0 (空)字符。 然后,它将返回的指针返回到现在以\\0终止的字符串的开头。 如果在传递了NULL的情况下再次运行,则它将再次基于定界符进行分割(如果存在),然后将指针传递回字符串的第二部分。 以下是您需要添加的代码:

#include <string.h>
char* var1;
char* var2;

然后在您的while循环中:

{
    var1 = strtok(text,",");
    var2 = strtok(NULL,",");
    printf("%s<NOT A ','>%s\n", var1,var2);
}

这对字符串文本的作用如下。 从文件中获取text =

/------------------------------------\
|u|s|e|r|n|a|m|e|,|p|a|s|s|w|o|r|d|\0|
\------------------------------------/

while循环的第一行将其更改为text =

/-------------------------------------\
|u|s|e|r|n|a|m|e|\0|p|a|s|s|w|o|r|d|\0|
\1------------------------------------/

其中var1指向1上方的字母,因此var1 = username 请注意,这意味着如果对text运行printf,还将获得用户名。 在第二行之后, text =

/-------------------------------------\
|u|s|e|r|n|a|m|e|\0|p|a|s|s|w|o|r|d|\0|
\1------------------2-----------------/

现在var1指向字符串“用户名”,而var2指向字符串“密码”。 如果您使用printf text ,您仍将获得“用户名”。

请注意,如果要获取两个以上的变量,则需要进行安全检查,以确保在尝试使用该字符串之前strtok不会返回NULL

另请注意,如果您修改text ,还将使var1var2混乱。 如果您希望以更永久的方式保存信息,我建议对另一个字符串使用strcpy

如果可以确定字段定界符为',并且输入数据只有两个字段。 因为strtok不是可重入的函数,所以我通常在知道输入数据格式时使用strtok scanf insead。

int re;
char line[200];
char usernme[100];
char password[100];
while (fgets(line, 200, inFile) != NULL)
{
    /*Reads and displays the file*/        
    re = sscane(line, "%[^","],%s", username, password);
    if(re == 2)
    {
        printf("Usarname = %s, Password = = %d\r\n", username, password);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM