首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PPM扫描和打印

PPM扫描和打印
EN

Stack Overflow用户
提问于 2017-09-13 20:00:27
回答 1查看 373关注 0票数 0

我想从.ppm类型的文件中扫描文档,这些文件是图像文件,但遵循以下数据结构

代码语言:javascript
复制
P3
4 4
255
255 255   0 255 255   0 255 255   0 255 255   0 
255 255   0 255   0   0 128 128 128 255 255   0 
255 255   0   0 255   0   0   0 255 255 255   0 
255 255   0 255 255   0 255 255   0 255 255   0 

每3个整数标记一列,因此在前3行之后,这将标记4x4表的模式,如第二行所示。

我的第一步是在这样一个文件中读取,其中的高度和宽度可以改变,然后使用scanf和printf以准确的格式重新打印它。

我的尝试如下:

代码语言:javascript
复制
scanf(" %d%d %d", &width, &height, &depth);
printf("P3\n%d %d\n %d\n", width, height, depth);

   while(scanf("%c", &input) >= 1) {
        for (int i = 0; i < width; i++) {
            printf("%c %c %c ", input, input, input);
            for (int j = 0; j < height; j++) {
                printf("\n");
            }
        }
    }

知道我错过了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-13 20:19:44

您的代码中有许多错误:

  1. 你只扫描一次input。因此,所有像素都具有相同的值。您可能希望在内部循环中调用scanf
  2. 格式说明符%c只读取一个字符,而不是一个数字。即使像素值的范围在一个字节内,也应该使用%d
  3. 如前所述,内部循环只打印linefeed。这属于外循环。
  4. 应该在内部循环中调用print,但使用不同的参数,除非您只想编写黑白图像:printf("%d %d %d ", r, g, b);。同样,您需要使用%d而不是%c
  5. 正如另一条注释中提到的,您需要跳过标题中的"P3“。您可以将第一行修改为scanf("%*s %d %d %d", &width, &height, &depth);。'%*s‘读取字符串而不将其赋值给变量。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46205927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档