我正在阅读包含内容的文本文件:
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);
}
答案 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”转换之前,您需要跳过它...