为什么我的fscanf似乎什么都没读?

时间:2019-11-27 12:29:20

标签: c scanf

我试图用C语言编写一个程序,以从文件中读取文本行,并创建节点以构建树。这些节点是结构。为此,我试图一次阅读六行。每当我的程序到达fscanf行时,它似乎都不会读取任何内容,将int设置为EOF并退出该函数。我尝试了很多格式组合,删除和添加空格,\ n等。我什至尝试制作单独的fsc​​anf行以尝试读取单个字符串,即使这样似乎也不扫描任何内容。我不知道为什么会这样。这是相关代码:

member_ptr readAndCreate(FILE * file){
    member_node * temp;
    temp = calloc(1, sizeof(member_node));
    //char temp_char_array[50] = {0,0,0,0,0};
    //char *overflow;

    int isEnd;
    //isEnd = fscanf(file, " %s", temp_char_array);

    //isEnd =
    isEnd = fscanf(file, " %[^\n] %[^\n] %d %[^\n] %[^\n] %[^\n]",
            temp -> family,
            temp -> personal,
            &temp ->ID,
            temp -> email,
            temp -> boatClass,
            temp -> boatName
            );

    //temp->ID =  (int)strtol(temp_char_array, &overflow, 10);
    if (isEnd == EOF){
        printf("Something went wrong, please try again \n");
        return NULL;
    } else {
        return temp;
    }
}

这是主要功能

int main() {
    char pathname[100];
    FILE * file;
    member_ptr top;
    member_ptr temp;

    printf("input file path\n");
    scanf("%[^\n]", pathname);
    file = fopen(pathname, "r");

    if (file == NULL){
        printf("file cannot be found, closing program...");
        exit(1);
    }

    top = readAndCreate(file);
    genTree(top, file);
    printOutTree(top);

    printf("Hello, World!\n");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

我看到您的扫描代码有问题。 // adds legend to map var legend = L.control({position: 'bottomright'}); legend.onAdd = function(map) { var div = L.DomUtil.create('div', 'info legend'), magnitudes = [0,1,2,3,4,5]; div.innerHTML += "<h4 style='margin:5px'>Magnitude</h4>" div.innerHTML += '<i class="circleR" style=background:>' + '</i>' + "Recent" + '<br>' // loop through color intervals and generate a lable for (var i=0; i < magnitudes.length; i++) { div.innerHTML += '<i class="circle" style=background:' + getColor(magnitudes[i] + 1) + '></i>' + magnitudes[i] + (magnitudes[i+1]?'&ndash;' + magnitudes[i+1] + '<br>': '+'); } return div; }; legend.addTo(map); // toggles legend on and off var legendLink = document.getElementById("legend"); legendLink.addEventListener('click', openLegend); function openLegend(){ info.style.display = 'block'; } 指定的字符串输入似乎丢失了。

尝试更改

s

进入

isEnd = fscanf(file, " %[^\n] %[^\n] %d %[^\n] %[^\n] %[^\n]",

您在isEnd = fscanf(file, " %[^\n]s %[^\n]s %d %[^\n]s %[^\n]s %[^\n]s", 函数中遇到相同的错误。