如何从文件中将布尔值加载到C中的数组中?

时间:2014-10-28 20:44:55

标签: c scanf

我基本上试图将1和0的文件加载为:

10101000 00000000 01010100
10000000 00000000 00000000
01101000 11111111 00000000

并按照确切的顺序将这些确切的布尔数字放入数组中。我对使用C的fscanf和通用文件I / O没有多少经验,所以它有点粗糙。这是我到目前为止所做的。

#include <stdio.h>

bool memory[1024];
char file;
char bit;
int i;

int main () {
    file = fopen ("memory.txt", "r");
    while (fscanf (file, "%d", bit) != EOF) {
        i = 0;
        memory[i] = bit;
        ++i;
    }
}

在我尝试编译时,我得到了:

./stackexample.c:3:1: error: unknown type name ‘bool’    
bool memory[1024];
 ^
./stackexample.c: In function ‘main’:
./stackexample.c:9:10: warning: assignment makes integer from pointer without a cast     [enabled by default]
 file = fopen ("memory.txt", "r");
      ^
./stackexample.c:10:5: warning: passing argument 1 of ‘fscanf’ makes pointer from integer without a cast [enabled by default]
 while (fscanf (file, "%d", bit) != EOF) {
 ^
In file included from /usr/include/features.h:374:0,
             from /usr/include/stdio.h:27,
             from ./stackexample.c:1:
/usr/include/stdio.h:443:12: note: expected ‘struct FILE * __restrict__’ but argument is of type ‘char’
extern int __REDIRECT (fscanf, (FILE *__restrict __stream,
        ^
./stackexample.c:10:5: warning: format ‘%d’ expects argument of type ‘int *’, but argument 3 has type ‘int’ [-Wformat=]
 while (fscanf (file, "%d", bit) != EOF) {
 ^

我不太确定为什么它说的是未知类型的bool,我也不太明白从指针做一个整数的警告。

3 个答案:

答案 0 :(得分:2)

C没有bool类型 - 它的C ++。如果您使用C99标准,则可以添加stdbool.h标题,并且booltypedef%d。这将解决您的第一个问题。

您不应该在fscanf()中使用10101000读取该文件,因为您获得了整数,例如%c。您应该指定宽度或将数据读取为字符(使用{{1}}) - 我个人会选择第二个选项。当然你应该&#34;扫描&#34;到一个正确类型的临时变量,然后复制到你的数组 - 这将解决警告。

答案 1 :(得分:0)

尽可能少的修改:

#include <stdio.h>
#include <stdbool.h>
#include <assert.h>

bool memory[1024];
char file;
char bit;
int i;

int main () {
    FILE * file = fopen ("memory.txt", "r");
    assert(file);
    while (fscanf (file, "%c", &bit) != EOF) {
        printf("%c",bit);
        assert( i < 1024 );
        if ( bit == '1' )
            memory[i++] = true;
        if ( bit == '0' )
            memory[i++] = false;
    }
    fclose(file);
}

答案 2 :(得分:0)

你没有正确定义你的文件,也没有使用bool,你可以使用int并检查它是否为1或0,带有if else语句

另外,请不要忘记关闭文件的fclose语句。

#include <stdio.h>
#define FILENAME "/your/file/path"
int main () 
{
    int memory[1024];
    int bit;
    int i;
    FILE *myfile; //Define file

    myfile = fopen (FILENAME, "r"); //Open file
    while (fscanf(myfile,"%i",&bit) != EOF) // Read file
    {
        i = 0;
        memory[i] = bit;
       ++i;
    }

    fclose(myfile);
    return 0;
}