首页 > 解决方案 > Scanf 过滤输入

问题描述

我的问题很简单,我想用它scanf来过滤输入并将每个单词放在array of string (array char 2d)

我试过了,fgetc()但至少对我来说很难听懂每一个字。

data.txt
add $t3,$s3,$s5
sh $v0,8($s0)

预期结果 :

add 
$t3
$s3
$s5   
sh
$v0
8
$s0

假设我们需要一个 10x10 的数组:

char test [10][10];

strcpy(test[0],"add");
...
... // looping until the last input
...
strcpy(test[7],$s0);


- 编辑 -

我尝试了这段代码,它只处理一行进行测试:

    char test[10][10]
    char c;
    unsigned int i = 0 , j = 0;
    FILE *fp = fopen("./data.txt", "rb");

    while((c=fgetc(fp)) != EOF )
            {     
                if (c == ' ' || c == '(' || c == ')' ){

                }else if( c == '$' || (c == ',')){
                    i++;
                    j = 0;
                    test[i][j]=c;
                    j++;

                }else if(c == '\n'){
                    i = 0;
                    j = 0;
                    break;
                }else{
                    test[i][j]= c;
                    j++;
                }
            }



谢谢你的时间。

标签: cscanf

解决方案


我迟到了,但如果你不需要scanf()为此使用家庭功能,你可以使用strtok().

做类似的事情

FILE *fin = fopen("input.txt", "r");
if(fin==NULL)
{
    return -1;
}
char buff[50];
while(fgets(buff, sizeof(buff), fin)!=NULL)
{
    for(char *ptr=strtok(buff, " (),\n"); ptr!=NULL; ptr=strtok(NULL, " (),\n"))
    {
        printf("%s\n", ptr);
    }
}

的第二个参数strtok()是一个字符串,每个字符串都是我们希望提取的标记的分隔符。

对于给定的输入,输出将是

add
$t3
$s3
$s5
sh
$v0
8
$s0

推荐阅读