保存到同一数组的循环中的fscanf会导致空格填充数组

时间:2016-07-15 13:21:21

标签: c scanf

我有一个格式为:

的文件
01,Name1
02,Name2
03,Name3
04,Name4
05,Name5

我绑定它使用户可以键入01或02之类的数字,并返回相应的名称。当我输入01时,这样可以正常工作。但是当我输入任何数字后,它不起作用,似乎我用以下代码替换循环:

fscanf(fp,"%20[^,],%s[^\n]",ln,name);
printf("1=%c 2=%c 3=%c 4=%c\n",ln[0],ln[1],search[0],search[1]);
fscanf(fp,"%20[^,],%s[^\n]",ln,name);
printf("1=%c 2=%c 3=%c 4=%c\n",ln[0],ln[1],search[0],search[1]);

第二次围绕ln [0]充满了大量空格或“\ n”。我说不出来。 任何帮助将不胜感激。

这是我的代码:

#include <stdio.h>

int main()
{

    puts("Enter seach number:");
    char search[2];
    scanf("%c%c",&search[0],&search[1]);

    FILE *fp;
  fp = fopen("/Users/user1/Desktop/text.txt","r");
    if(fp == NULL){
        puts("File dose not exits");
        return (1);
    }
    else{
        puts("File found");
   }
    char ln[3];
    char name[20];

    fopen("fp","r");
    puts("File opened");

    int searching = 1;

    while(searching == 1)
    {
        fscanf(fp,"%20[^,],%s[^\n]",ln,name);

        if(ln[0]==search[0]&&ln[1]==search[1])
        {
            printf("%s",name);
            searching = 0;
        }
        else if(ln[0] == '\n')
        {
            puts("Could not find number");
            searching = 0;
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

错误使用fscanf()格式

// fscanf(fp,"%20[^,],%s[^\n]",ln,name);
fscanf(fp,"%20[^,],%s%*[^\n]",ln,name);
// or 
fscanf(fp,"%20[^,],%s ",ln,name);
// or 
fscanf(fp," %20[^,],%s",ln,name);

最好检查结果并将宽度添加到%s

char ln[20+1];
char name[30+1];
if (2 == fscanf(fp,"%20[^,],%30s%*[^\n]",ln,name)) Success();

最好使用fgets()

char buf[100];
if (fgets(buf, sizeof buf, fp) == NULL) {
  if (2 == sscanf(buf,"%20[^,],%s",ln,name)) Success();
}