C程序:错误的阅读和打印从文本文件中的特定列 [英] C program: Error reading and printing a particular column from a text file
本文介绍了C程序:错误的阅读和打印从文本文件中的特定列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我要打印从文本文件1PGB.pdb列6到一个输出文件走出去。以下是我的code:
的#include<&stdio.h中GT;
#包括LT&;&stdlib.h中GT; / *对于exit()函数* /
#定义ROW 500
#定义COL 12
诠释的main()
{
INT N6,垃圾;
FILE * FP;
FILE * OP =的fopen(走出去,W);
INT比分[ROW] [COL];
INT行,列,项,I,J;
如果((FP = FOPEN(1PGB.pdb,R))== NULL)
{
的printf(打开文件时出错!);
出口(1); / *如果文件指针返回NULL程序退出。 * /
}
为(行= 0;&行LT;排;排++)
{
COL = 5;
的fscanf(FP,%D,&安培;比分[行] [COL]);
fprintf中(OP,%D,成绩[行] [COL]);FCLOSE(FP);
FCLOSE(OP);
}
返回0;
}
它提供了以下错误。
错误`./$c$c1:双重释放或腐败(出):0x0000000000cde250 ***
中止(核心转储)
1PGB.pdb文件的前几行是:
ATOM 1N的遇到了一个1 12.969 18.506 30.954 1.00 15.93ñ
ATOM 2 CA遇到了一个1 13.935 18.529 29.843 1.00 17.40Ç
ATOM的3C遇到了一个1 13.138 18.692 28.517 1.00 14.65Ç
ATOM 4 O遇到了一个1 12.007 18.222 28.397 1.00 13.04Ø
ATOM 5 CB遇到了一个1 14.733 17.216 29.882 1.00 20.72Ç
ATOM 6 CG遇到了一个1 15.742 16.983 28.738 1.00 23.81Ç
ATOM 7 SD遇到了一个1 17.378 17.025 29.359 1.00 28.11小号
ATOM 8 CE遇到了一个1 17.166 16.055 30.819 1.00 27.51Ç
ATOM 9 N THR A 2 13.719 19.413 27.573 1.00 12.63ñ
ATOM 10 CA THR A 2 13.088 19.661 26.283 1.00 12.68Ç
ATOM(11)C THR A 2 13.561 18.631 25.300 1.00 12.02Ç
ATOM 12 O THR A 2 14.763 18.432 25.121 1.00 13.07Ø
ATOM 13 CB THR A 2 13.527 20.980 25.667 1.00 14.62Ç
解决方案
这似乎是一个不错的,简单的方法:
的#include<&stdio.h中GT;
#包括LT&;&stdlib.h中GT;诠释的main()
{
焦线[1000];
INT N6;
FILE *计划生育=的fopen(1PGB.pdb,R);
FILE * OP =的fopen(走出去,W); 如果(FP == NULL ||运算== NULL)
{
fprintf中(标准错误,打开文件时出错。);
出口(1);
} 而(与fgets(线,的sizeof(线),FP)!= 0)
{
/ *使用%* s使用scanf函数时跳过一个字。 * /
sscanf的(行,%* S *%S%* S *%S%* S%D,&安培; N6);
fprintf中(OP,%d个\\ N,N6);
}
返回0;
}
I want to print column 6 from a text file "1PGB.pdb" into an output file "out". Following is my code:
#include <stdio.h>
#include <stdlib.h> /* For exit() function*/
#define ROW 500
#define COL 12
int main()
{
int n6, garbage;
FILE *fp;
FILE *op = fopen("out", "w");
int score[ROW][COL];
int row, col, item, i, j;
if ((fp=fopen("1PGB.pdb","r"))==NULL)
{
printf("Error! opening file");
exit(1); /* Program exits if file pointer returns NULL. */
}
for(row=0; row<ROW; row++)
{
col=5;
fscanf(fp, "%d", &score[row][col]);
fprintf(op, "%d", score[row][col]);
fclose(fp);
fclose(op);
}
return 0;
}
It gives the following error.
Error in `./Code1': double free or corruption (out): 0x0000000000cde250 *** Aborted (core dumped)
The first few lines of 1PGB.pdb file are:
ATOM 1 N MET A 1 12.969 18.506 30.954 1.00 15.93 N
ATOM 2 CA MET A 1 13.935 18.529 29.843 1.00 17.40 C
ATOM 3 C MET A 1 13.138 18.692 28.517 1.00 14.65 C
ATOM 4 O MET A 1 12.007 18.222 28.397 1.00 13.04 O
ATOM 5 CB MET A 1 14.733 17.216 29.882 1.00 20.72 C
ATOM 6 CG MET A 1 15.742 16.983 28.738 1.00 23.81 C
ATOM 7 SD MET A 1 17.378 17.025 29.359 1.00 28.11 S
ATOM 8 CE MET A 1 17.166 16.055 30.819 1.00 27.51 C
ATOM 9 N THR A 2 13.719 19.413 27.573 1.00 12.63 N
ATOM 10 CA THR A 2 13.088 19.661 26.283 1.00 12.68 C
ATOM 11 C THR A 2 13.561 18.631 25.300 1.00 12.02 C
ATOM 12 O THR A 2 14.763 18.432 25.121 1.00 13.07 O
ATOM 13 CB THR A 2 13.527 20.980 25.667 1.00 14.62 C
解决方案
This seems like a good, simple approach:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char line[1000];
int n6;
FILE *fp = fopen("1PGB.pdb", "r");
FILE *op = fopen("out", "w");
if (fp == NULL || op == NULL)
{
fprintf(stderr, "Error opening file.");
exit(1);
}
while (fgets(line, sizeof(line), fp) != 0)
{
/* Use "%*s" to skip a word when using scanf. */
sscanf(line, "%*s %*s %*s %*s %*s %d", &n6);
fprintf(op, "%d\n", n6);
}
return 0;
}
这篇关于C程序:错误的阅读和打印从文本文件中的特定列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文