我正在尝试编写一段代码,以读取PPM文件的“标题”。 例如:
P3
400200
255
在这种情况下,宽度为400,高度为200,最大颜色值为255。我试图将这些字符串值分配为整数,但我认为有一种更好的方法来减少行数并增加行数“更安全。”如何避免必须使用atoi()函数? (请注意,我已经在“ ACTUAL代码”中添加了“检查文件是否可打开部分,这只是减少的代码段)
char buffer[200];
char height[200];
char width[200];
char maxColour[200];
FILE *file = fopen("mcmaster.ppm", "r");
fgets(buffer, sizeof(buffer), file); // File format line
fgets(buffer, sizeof(buffer), file); // Width x height line
sscanf(buffer, "%s %s", width, height);
fgets(buffer, sizeof(buffer), file); // Max colour line
sscanf(buffer, "%s", maxColour);
int actHeight = atoi(height);
int actWidth = atoi(width);
int actMaxColour = atoi(maxColour);
答案 0 :(得分:-2)
我建议您使用fscanf而不是sscanf。首先,定义“错误功能”以验证读取文件的问题,
void fscanf_Error(char *file)
{
fprintf(stderr,"Error reading file: %s\n. Exiting(1).\n ",file);
exit(1);
}
然后
char dummy[12];
if(!fscanf(file, "%s\n", dummy))
fscanf_Error(file);
if(!fscanf(file," %d %d\n", width, height))
fscanf_Error(file);
if(!fscanf(file, "%d\n", maxColour))
fscanf_Error(file);