将文本文件中的整数放入C中的int数组中

时间:2014-03-01 01:37:37

标签: c arrays

我正在阅读包含内容的文本文件:

2, 0, 15, 14, 24, 6, 19, 9, 25, 13, 7, 5, 21, 10, 12, 11, 4, 22, 23, 20, 17, 8, 18, 3, 1, 16

我想将每个单独的元素放入一个int数组中,然后打印该数组。我的下面的代码给我一个分段错误,但我无法解决问题。任何帮助都会很棒。

FILE *the_cipher_file;
the_cipher_file = fopen("cipher.txt", "r");
int * the_alphabet_array;
int size_of_alphabet;
int the_letter_counter = 0;

while(fscanf(the_cipher_file, "%d", &size_of_alphabet) > 0){
    the_alphabet_array[the_letter_counter] = size_of_alphabet;
    the_letter_counter++;
    printf("%d", size_of_alphabet);
}

2 个答案:

答案 0 :(得分:2)

这是我写的一个简单的程序,它的原始但应该是你想要的,还要注意检查*fp是否为null。

我测试了你的数据工作正常(只读数字并跳过空格和逗号)。

2, 0, 15, 14, 24, 6, 19, 9, 25, 13, 7, 5, 21, 10, 12, 11, 4, 22, 23, 20, 17, 8, 18, 3, 1, 16    

#include <stdio.h>
int main(int argc, char *argv[]){

FILE *fp = fopen(argv[1],"r");
int array[100];
int size_of_alphabet =0;
int i =0;
while (fscanf(fp," %d%*[,] ",&size_of_alphabet)>0 && i<100) {
    array[i] = size_of_alphabet;
    printf("%d\n", size_of_alphabet);
    i++;

}
}

输入是argv [1],因此使用./a.out file_name.txt运行程序

*表示丢弃所读取的内容,不要将其存储在输出变量中,因此在这种情况下它会丢弃逗号,[的详细信息可以在scanf或fscanf手册。大多数以'f'结尾的函数(打印格式化的东西),如scanf和fscanf都有类似的手册页。

使用scanf和skipp资料 - http://classes.soe.ucsc.edu/cmps012a/Fall98/faq/scanfQ.html

fsacnf手册页http://www.manpagez.com/man/3/fscanf/

有关扫描功能的有用信息。(注意缓冲区溢出)

scanf("%[^,]",array); // it expects characters(string) that don't contain commas,
                      // commas will be skipped. 

只读一个逗号会喜欢这个

scanf("%[,]",array); only commas will be read as a string

跳过逗号将如下所示。

scanf("%d%*[,]",array); this one skips the comma if its after the number.

答案 1 :(得分:1)

首先测试fopen是否成功,即the_cipher_file != NULL

然后确保处理逗号 - 使用“%d”扫描输入文件格式说明符读取并将一系列数字转换为整数值,但分隔符在输入缓冲区中保持未读状态。在下一次循环迭代再次应用“%d”转换之前,您需要跳过它...