gpt4 book ai didi

c - 从文本文件中获取演示的像素值

转载 作者:太空宇宙 更新时间:2023-11-04 08:40:41 25 4
gpt4 key购买 nike

我编写了一个程序来从文本文件中读取值并将它们视为演示的像素值。我的任务是扫描像素位置的值,如果该值是行值大于 2 或列值大于1 它将打印 “无效像素位置\n” 然后 “退出按\"q\"或继续下一个位置按\"c\"。之后这将扫描输入。现在的问题是,如果我输入无效值,例如 3,5,它会打印 printf() 语句两次,然后出现在 scanf() 函数上。 这是我的代码:-

 #include"stdio.h"
#include"stdafx.h"
#include"conio.h"

int r,c,check;
int main()
{
FILE *p;
char l[3],m[3],n[3],i,j,k,a;

p=fopen("s.txt","r+");
goto tab;
// int r,c,check;
tab:
{

while(1)
{
fseek(p,0,SEEK_SET);
printf("enter the position\n");
scanf("%d\n%d",&r,&c);

while((r>2)|(c>1))
{
printf("invalid pixel position\n");

printf("to exit press \"q\" or to continue for next position press \"c\":-\n");

scanf("%c",&check);
if(check=='c')
{
goto tab;
}
else if(check=='q')
{
return 0;
}

}




printf("you ask for pixel %c %c- ");printf("%2d%2d\n",r,c);
for(k=0;k<=r;k++)
{
for(i=0;i<=c;i++)
{
for(j=0;j<3;j++)
{
fread(&l[j],sizeof(a),1,p);
fread(&m[j],sizeof(a),1,p);
fread(&n[j],sizeof(a),1,p);
fread(&a,sizeof(a),1,p);
}

}
}

for(i=0;i<3;i++)
{
if(i==0)
{
printf(" red= %c%c%c",l[i],m[i],n[i]);
}
if(i==1)
{
printf(" green= %c%c%c",l[i],m[i],n[i]);
}
if(i==2)
{
printf(" blue= %c%c%c\n",l[i],m[i],n[i]);
}
}
}
}
fclose(p);
getch();
}

最佳答案

您在使用 scanf 时有一个非常常见的错误,即它将换行符留在输入缓冲区中,并且扫描字符会读取所有 个字符,包括换行符。

有问题的两行是:

scanf("%d\n%d",&r,&c);

...

scanf("%c",&check);

第一个scanf 函数,正如我上面所说,将最后一个换行符留在输入缓冲区中,供第二个scanf 读取。这很容易解决,通过在第二个 scanf 格式代码中添加一个前导空格来指示函数跳过前导空格:

scanf(" %c",&check);

关于c - 从文本文件中获取演示的像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23736716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com