%c 在 while 循环中保留新行字符,修复了吗?
%c keeping new line char in while loop, fix?
/*Title: P3.c
Location: ~/csc1710/P3/P3.c
Class: CSC1710
Name: Emily
Date: 02-18-2017
This program is meant to convert a colored image to black and white.*/
#include<stdio.h>
#include <string.h>
int main(void)
{
int height, width;
char red;
char green;
char blue;
char imageType[3];
char comment[256];
char newlinechar;
int mcc;
unsigned char color;
//scan and print for image type
fscanf(stdin,"%[^\n]%c",imageType,&newlinechar);
strncpy(imageType,"P2",3);
fprintf(stdout,"%s\n",imageType);
//scan and print for comment
fscanf(stdin,"%[^\n]%c",comment,&newlinechar);
strncpy(comment,"#EMILY MORAN Black and White Conversion Routine, Version 0.1",256);
fprintf(stdout,"%s\n",comment);
//scan and print for height and width
fscanf(stdin,"%d %d",&width,&height);
fprintf(stdout,"%d %d\n",width,height);
//scan and print for max color code
fscanf(stdin,"%d",&mcc);
fprintf(stdout,"%d\n",mcc);
//while loop for RGB numbers
while(fscanf(stdin," %c", ,&red)!=EOF){
fscanf(stdin,"%c",&green);
fscanf(stdin,"%c",&blue);
color =(unsigned char)0.3*red+0.5*green+0.2*blue;
fprintf(stdout,"%hhu\n",color);
}
return(0);
}
以上是我的 CSC class 的编程项目。该项目的第一部分是通过使用整数值将 ppm 图像转换为 pgm(对其进行灰度缩放)。这部分在我的图像编辑器中非常适合我。
第二部分是通过使这些整数值成为字符来使用 less space。但是,我现在 运行 遇到图像显示不正确的问题。它仍然是灰度的,但与第一个图像不同。我的教授今天早上谈到了循环没有跳过新行的错误,但是当我试图在我的 while 循环中编辑我的 fscanf 以显示为 newImage 和注释时,编译器抱怨分段失败。
顺便说一下,我们正在向程序中输入一个 .ppm 文件,然后输出一个新的 .pgm 值。
谁能帮我看看我代码中的问题?谢谢!
当您输出新的颜色数据时,您将包含一个 \n
字符
fprintf(stdout,"%hhu\n",color);
当它应该是一个连续的块时。所以应该是这样
fprintf(stdout,"%hhu",color);
对于任何想知道的人,我和我的教授发现了这个错误,最后的 unsigned char 应该是一个 char。感谢大家的帮助!
/*Title: P3.c
Location: ~/csc1710/P3/P3.c
Class: CSC1710
Name: Emily
Date: 02-18-2017
This program is meant to convert a colored image to black and white.*/
#include<stdio.h>
#include <string.h>
int main(void)
{
int height, width;
char red;
char green;
char blue;
char imageType[3];
char comment[256];
char newlinechar;
int mcc;
unsigned char color;
//scan and print for image type
fscanf(stdin,"%[^\n]%c",imageType,&newlinechar);
strncpy(imageType,"P2",3);
fprintf(stdout,"%s\n",imageType);
//scan and print for comment
fscanf(stdin,"%[^\n]%c",comment,&newlinechar);
strncpy(comment,"#EMILY MORAN Black and White Conversion Routine, Version 0.1",256);
fprintf(stdout,"%s\n",comment);
//scan and print for height and width
fscanf(stdin,"%d %d",&width,&height);
fprintf(stdout,"%d %d\n",width,height);
//scan and print for max color code
fscanf(stdin,"%d",&mcc);
fprintf(stdout,"%d\n",mcc);
//while loop for RGB numbers
while(fscanf(stdin," %c", ,&red)!=EOF){
fscanf(stdin,"%c",&green);
fscanf(stdin,"%c",&blue);
color =(unsigned char)0.3*red+0.5*green+0.2*blue;
fprintf(stdout,"%hhu\n",color);
}
return(0);
}
以上是我的 CSC class 的编程项目。该项目的第一部分是通过使用整数值将 ppm 图像转换为 pgm(对其进行灰度缩放)。这部分在我的图像编辑器中非常适合我。
第二部分是通过使这些整数值成为字符来使用 less space。但是,我现在 运行 遇到图像显示不正确的问题。它仍然是灰度的,但与第一个图像不同。我的教授今天早上谈到了循环没有跳过新行的错误,但是当我试图在我的 while 循环中编辑我的 fscanf 以显示为 newImage 和注释时,编译器抱怨分段失败。
顺便说一下,我们正在向程序中输入一个 .ppm 文件,然后输出一个新的 .pgm 值。
谁能帮我看看我代码中的问题?谢谢!
当您输出新的颜色数据时,您将包含一个 \n
字符
fprintf(stdout,"%hhu\n",color);
当它应该是一个连续的块时。所以应该是这样
fprintf(stdout,"%hhu",color);
对于任何想知道的人,我和我的教授发现了这个错误,最后的 unsigned char 应该是一个 char。感谢大家的帮助!