簡體   English   中英

從文本文件中獲取demo的像素值

[英]fetching pixel values for demo from text file

我編寫了一個程序來讀取文本文件中的值並將它們視為demo的像素值。我的任務是掃描像素位置的值,如果值是行值大於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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM