从c中的文本文件中读取整数
reading integers from text file in c
我想读取以这种方式存储图像像素值的文本文件
234
23
176
235
107
187
201
128
147
...
....
..
我试过用这种方式阅读这个文本文件
#include<stdio.h>
#define M 2500
int main()
{
unsigned new_img[M];
unsigned char a;
FILE *input;
input=fopen("D:/trail.txt","r");
for(i=0;i<M;i++)
{
a=fgetc(input);
new_img[i]=(int)a;
input++;
}
....
....
...
return 0;
}
当我尝试打印时显示一些随机值。
此外,我所有的像素值都在 0 到 255 的范围内。但是在输出屏幕上,我得到的值高达 1 到 100 万
根据fgetc()
的man page,我们可以看到
fgetc() reads the next character from stream and returns it as an unsigned char cast to an int, or EOF on end of file or error.
它以字典顺序逐个字符读取,而不是基于值。
相反,我建议
其他一些建议:
main()
的推荐签名是int main(void)
。
- 在使用 returned 指针之前始终检查
fopen()
是否成功。
- FWIW,
fgetc()
return 和 int
。理想情况下,您应该在 int
变量中收集 return 值。
注意:您需要注意 fgets()
读取的尾随 \n
并检查输入有效性的错误。
你使用的是fgetc()
,这不是读取整数的正确方法,而且也做错了。请注意它的 return 类型是 int
,因为它可以 return 常量 EOF
。您将 return 值截断为 unsigned char
,这没有任何意义。
它读取 个字符 ,因此对于输入字符串,例如234
,您将首先看到字符 2
,然后是 3
,然后是 4
,然后是换行符,依此类推。不是你想要的。
你应该只使用:
int pixel;
if(fscanf(input, "%d", &pixel) == 1)
{
printf("read pixel %d\n", pixel);
}
这将转换一个十进制整数(可以由许多单独的字符组成),并将该整数写入pixel
。如果失败,则不会 return 1
.
我想读取以这种方式存储图像像素值的文本文件
234
23
176
235
107
187
201
128
147
...
....
..
我试过用这种方式阅读这个文本文件
#include<stdio.h>
#define M 2500
int main()
{
unsigned new_img[M];
unsigned char a;
FILE *input;
input=fopen("D:/trail.txt","r");
for(i=0;i<M;i++)
{
a=fgetc(input);
new_img[i]=(int)a;
input++;
}
....
....
...
return 0;
}
当我尝试打印时显示一些随机值。 此外,我所有的像素值都在 0 到 255 的范围内。但是在输出屏幕上,我得到的值高达 1 到 100 万
根据fgetc()
的man page,我们可以看到
fgetc() reads the next character from stream and returns it as an unsigned char cast to an int, or EOF on end of file or error.
它以字典顺序逐个字符读取,而不是基于值。
相反,我建议
其他一些建议:
main()
的推荐签名是int main(void)
。- 在使用 returned 指针之前始终检查
fopen()
是否成功。 - FWIW,
fgetc()
return 和int
。理想情况下,您应该在int
变量中收集 return 值。
注意:您需要注意 fgets()
读取的尾随 \n
并检查输入有效性的错误。
你使用的是fgetc()
,这不是读取整数的正确方法,而且也做错了。请注意它的 return 类型是 int
,因为它可以 return 常量 EOF
。您将 return 值截断为 unsigned char
,这没有任何意义。
它读取 个字符 ,因此对于输入字符串,例如234
,您将首先看到字符 2
,然后是 3
,然后是 4
,然后是换行符,依此类推。不是你想要的。
你应该只使用:
int pixel;
if(fscanf(input, "%d", &pixel) == 1)
{
printf("read pixel %d\n", pixel);
}
这将转换一个十进制整数(可以由许多单独的字符组成),并将该整数写入pixel
。如果失败,则不会 return 1
.