因此,我创建了一个函数,该函数能够从文件中提取标题并将其放入没有注释的新文件中。所有.ppm文件的最大颜色值为255,所以这是我的功能:
void headerinfo(FILE *infile, FILE *outfile){
char line[100];
int c;
fgets(line,100,infile);
c=strlen(line);
while(line[c]!='\n' && line[c-1]!='5' && line[c-2]!='5' && line[c-3]!='2'){
if(line[0]=='#'){
fgets(line,100,infile);
c=strlen(line);
}
else{
fputs(line,outfile);
fgets(line,100,infile);
c=strlen(line);
}
}
fputs(line,outfile);
}
我遇到的问题是我有两个.ppm文件,它们的标题格式相似,但是一个561 x 375尺寸的文件不会将最后一行255输出到新文件中。这两个文件是否受我的代码影响?
Here is the .ppm file that does not copy over the 255 line
答案 0 :(得分:1)
c
条件错误。由于line[c]
是字符串的长度,因此'\n'
指向结尾的空字符。它永远不能是line[c-1]
。 '\n'
是'5'
的结尾行(文件的最后一行可能除外),因此它永远不会'5'
(除非最后一行以line[c-2]
结尾)。当然,line[c-3]
和while (! (4 <= c && line[c-4] == '2' && line[c-3] == '5' && line[c-2] == '5' && line[c-1] == '\n')) {
也不合适。
您真正想要的是:
void headerinfo(FILE *infile, FILE *outfile)
{
char line[100];
size_t c;
do
{
fgets(line, sizeof line, infile);
c = strlen(line);
if (line[0] != '#')
fputs(line, outfile);
} while (! (4 <= c && strcmp(&line[c-4], "255\n") == 0));
}
有一些改进:
public class Menu extends AppCompatActivity {
dbhelper mydb;
//....
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
Intent intent = getIntent();
String user = intent.getExtras().getString("nama");
// ..rest of your code...
}
}