我想打印输入文件中的所有行" 1PGB.pdb"到文件" out"包含单词" ATOM"。
以下是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char line[1000];
char *pch;
char c[5] = "ATOM";
char buff[5];
FILE *fp = fopen("1PGB.pdb", "r");
FILE *op = fopen("out", "w");
if(fp == NULL || op == NULL)
{
fprintf(stderr, "Error opening file.");
exit(1);
}
else
{
while (fgets(c, sizeof(line), fp) != 0)
{
if((pch = strstr (c, buff))!= 0)
fprintf(op, "%s\n", c);
}
}
fclose(fp);
fclose(op);
}
错误:它打印来自&#34; 1PGB.pdb&#34;的所有行。提交给&#34; out&#34;文件。
1PGB.pdb文件的几行如下:
REMARK 525 HOH A 79 DISTANCE = 8.99 ANGSTROMS
DBREF 1PGB A 2 56 UNP P06654 SPG1_STRSG 228 282
SEQRES 1 A 56 MET THR TYR LYS LEU ILE LEU ASN GLY LYS THR LEU LYS
SEQRES 2 A 56 GLY GLU THR THR THR GLU ALA VAL ASP ALA ALA THR ALA
SEQRES 3 A 56 GLU LYS VAL PHE LYS GLN TYR ALA ASN ASP ASN GLY VAL
SEQRES 4 A 56 ASP GLY GLU TRP THR TYR ASP ASP ALA THR LYS THR PHE
SEQRES 5 A 56 THR VAL THR GLU
FORMUL 2 HOH *24(H2 O)
HELIX 1 1 ALA A 23 ASP A 36 1 14
SHEET 1 S1 4 LEU A 12 ALA A 20 0
SHEET 2 S1 4 MET A 1 GLY A 9 -1
SHEET 3 S1 4 LYS A 50 GLU A 56 1
SHEET 4 S1 4 GLU A 42 ASP A 46 -1
CRYST1 36.633 36.633 79.254 90.00 90.00 120.00 P 31 2 1 6
ORIGX1 1.000000 0.000000 0.000000 0.00000
ORIGX2 0.000000 1.000000 0.000000 0.00000
ORIGX3 0.000000 0.000000 1.000000 0.00000
SCALE1 0.027298 0.015760 0.000000 0.00000
SCALE2 0.000000 0.031521 0.000000 0.00000
SCALE3 0.000000 0.000000 0.012618 0.00000
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
答案 0 :(得分:2)
char c[4] = "ATOM";
应为char c[5] = "ATOM";
,每个C字符串末尾都有一个隐式'\0'
。 <{1}}或char c[] = "ATOM";
也是可能的。
const char *c = "ATOM";
应为while (fgets(c, sizeof(line), fp) != 0)
,您要写入while (fgets(line, sizeof(line), fp) != 0)
缓冲区。
line
应为if((pch = strstr (c, buff))!= 0)
。您正在if ((pch = strstr(line, c))!= 0)
中的字符串中查找字符串c
(包含&#34; ATOM&#34;)。
line
应为fprintf(op, "%s\n", c);
。如果你想从&#34; ATOM&#34;开始写下剩下的行,那么fprintf(op, "%s", line);
也是可能的。进入文件。 @Tom Zych指出fgets中的字符串中已经有一个新行,所以你不需要在fprintf(op, "%s", pch);
中添加另一行。在这种情况下,您也可以使用fprintf
。