如何通过scanf读取文件中的不同行输入

时间:2011-06-06 21:22:41

标签: c scanf

我正在尝试使用scanf通过文件读取不同的输入行。我只能阅读第一行并存储它。

这是我写的代码。

#include <stdio.h>
#include <string.h>   

int imageWidth, imageHeight, safeRegionStart, safeRegionWidth;

main(void)
{       
    int i=0, j=0; 
    int totalP, pixel, totalSafeP, concat; 
    int unsigned r,g,b;

    scanf("%d %d %d %d", &imageWidth, &imageHeight, &safeRegionStart, &safeRegionWidth);
    totalP = imageWidth * imageHeight ;
    totalSafeP = imageHeight * safeRegionWidth;
    char arr[512][50];
    char arr1[imageWidth][imageHeight];

    printf("total # of pixels: %d\nTotal # of safe Pixels: %d\n", totalP, totalSafeP);

    memset(arr,0x0,sizeof(arr));


    while(i!=totalP)
    {
        i++;
        scanf("%d", &pixel);

        /*bit shifting to get r,g,b*/       
        int r = pixel << 8;
        r = (unsigned int)logicalRightShift(r, 24);

        int g = pixel << 16;
        g = (unsigned int)logicalRightShift(g, 24);

        int b = pixel << 24;
        b = (unsigned int)logicalRightShift(b, 24);
        //printf("%d) r:%d , g:%d , b:%d\n",i, r,g,b);
        fillDescription(arr, r, g, b);


    }/*End for scanning all pixels*/
}/*end main*/ 

3 个答案:

答案 0 :(得分:1)

我的建议是永远不要使用scanf(或fscanf)来读取输入。使用其他方法(fgets等)读取输入,然后解析输出。可能与sscanf,可能与其他系统。我已经看到人们直接用scanf读取的错误太多了。

答案 1 :(得分:0)

您的代码正在从标准输入而不是从文件中读取数据。您的代码尖叫,要求进行错误检查,但在最佳情况下工作。以下是运行它的示例:

$ ./test 
1 2 3 4
total # of pixels: 2
Total # of safe Pixels: 8
12
13
$ 

基本上,不要忘记点击<Enter>scanf函数逐行解析数据。

答案 2 :(得分:0)

正如Vlad Lazarenko所说,你正在从标准输入中读取数据。如果您想从文件中读取,可以考虑使用fscanf