谁有c语言中int ferror(FILE *stream),返回非零0代表含义列表?
使用a,b,c代表A,B,C的数量,初始都为0。n代表这系列产品的总数量看你的表上初始为6,可以建个三个数组分别代表A,B,C。比如A[3]代表三个A,其中存入的是条件。根据你的描述写的。
void main{int a,b,c;int A[3],B[2],C[1];//里面存储的是A,B,C的条件//初始化for(i=0;i<3;i++){ scanf("%d",&temp);//temp表示对应的条件 A[i]=temp; if(A[i]==1) a++;}for(i=0;i<2;i++){ scanf("%d",&temp);//temp表示对应的条件 B[i]=temp; if(B[i]==1) b++;}for(i=0;i<1;i++){ scanf("%d",&temp); C[i]=temp; if(C[i]==1) c++;}printf("A=%d,B=%d,C=%d",a,b,c);}
一是要看调用函数对参数的要求,比如scanf如果输入整数要求给一个指向整数变量的指针,而int a;是整数变量,它不是指针,而是int型的,所以要取出这个变量的地址写到参数位置&a;如果是int a[10][10];那么a也不是指向整数变量的指针,假设输入a[i][j]这个变量,它的类型是int型的,也需要取它的地址,也就是在前面加&得到,这样最容易记忆,也可以写成a[i]+j这个就是指针了,因为a[i]是指向a[i][0]的指针;int a[10];这种情况,如果输入a[2]当然也要写&a[2]最直观,也可以写a+2,int *p,a[10];时还可以写p=a;参数为p+2;或者p=&a[2];参数直接写p。
记那么多没有必要,你只要记住:scanf输入要求提供的是个地址或者说指针,那我就将变量写出来,然后为取地址前面加个取地址的运算符&。其他的情况你见过就可以了,万一别人的程序写出来你也能认。
函数名: ferror
功 能: 在调用各种输入输出函数(如 putc.getc.fread.fwrite等)时,如果出现错误,除了函数返回值有所反映外,还可以用ferror函数检查。 它的一般调用形式为 ferror(fp);如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。应该注意,对同一个文件 每一次调用输入输出函数,均产生一个新的ferror函 数值,因此,应当在调用一个输入输出函数后立即检 查ferror函数的值,否则信息会丢失。在执行fopen函数时,ferror函数的初始值自动置为0。 用 法: int ferror(FILE *stream); 程序例: #include <stdio.h> int main(void) { FILE *stream; /* open a file for writing */ stream = fopen("DUMMY.FIL", "w"); /* force an error condition by attempting to read */ (void) getc(stream); if (ferror(stream)) /* test for an error on the stream */ { /* display an error message */ printf("Error reading from DUMMY.FIL\n"); /* reset the error and EOF indicators */ clearerr(stream); } fclose(stream); return 0; }
int ferror ( FILE * stream );
Check error indicator
Checks if the error indicator associated with stream is set, returning a value different from zero if it is.
This indicator is generaly set by a previous operation on the stream that failed.
Parameters
stream
Pointer to a FILE object that identifies the stream.
Return Value
If the error indicator associated with the stream was set, the function returns a nonzero value.
Otherwise, it returns a zero value.
根据库函数的说明,非零的error indicator没有具体的含义,就是用来指示这个FILE tream当前有错误发生,一般是为增强代码强健性加入的检验性程序,避免在文件操作时出现程序锁死或错误。 程序中有些错误的具体错误信息往往很难捕捉和辨别的,而且一般是与编译器和操作系统平台相关的。
int __cdecl ferror (FILE *stream)
{
return( ((stream)->_flag & _IOERR) );
}
_IOERR是0x0020,所以ferror的返回值取决于FILE *stream->_flag的值。
而C 语言标准没有确定 FILE 的结构,它只给出了一个 FILE 的轮廓( C 标准只描述了 FILE 的 5 个成员,而且没有给出它们的命名).因此,不同的实现有不同的命名办法.
比如 C++Builder 6 的 FILE 结构为:
typedef struct
{
unsigned char *curp; /* Current active pointer */
unsigned char *buffer; /* Data transfer buffer */
int level; /* fill/empty level of buffer */
int bsize; /* Buffer size */
unsigned short istemp; /* Temporary file indicator */
unsigned short flags; /* File status flags */
wchar_t hold; /* Ungetc char if no buffer */
char fd; /* File descriptor */
unsigned char token; /* Used for validity checking */
} FILE; /* This is the FILE object */
flag表示文件状态,还是很笼统。
不嫌麻烦,你可以用 C++ 流来反馈具体实现的flag标志位是什么样的.
返回的常量
系统错误消息
“值”
EPERM 不允许执行该操作 1
ENOENT 没有此文件或目录 2
ESRCH 没有此进程 3
EINTR 函数中断 4
EIO I/O 错误 5
ENXIO 没有此设备或地址 6
E2BIG 参数列表太长 7
ENOEXEC 执行格式错误 8
EBADF 文件编号错误 9
ECHILD 没有生成的进程 10
EAGAIN 没有更多进程、没有足够内存或达到最大嵌套级别 11
ENOMEM 没有足够内存 12
EACCES 权限被拒绝 13
EFAULT 地址错误 14
EBUSY 设备或资源忙碌 16
EEXIST 文件已存在 17
EXDEV 跨设备链接 18
ENODEV 没有此设备 19
ENOTDIR 不是目录 20
EISDIR 是目录 21
EINVAL 参数无效 22
ENFILE 系统中打开的文件太多 23
EMFILE 打开的文件太多 24
ENOTTY 不适当的 I/O 控制操作 25
EFBIG 文件太大 27
ENOSPC 设备上没有剩余空间 28
ESPIPE 搜寻无效 29
EROFS 只读文件系统 30
EMLINK 链接太多 31
EPIPE 管道损坏 32
EDOM 数学参数 33
ERANGE 结果太大 34
EDEADLK 会发生资源死锁 36
EDEADLOCK 与 EDEADLK 相同,以便与早期的 Microsoft C 版本兼容 36
ENAMETOOLONG 文件名太长 38
ENOLCK 无可用锁 39
ENOSYS 函数不受支持 40
ENOTEMPTY 目录不为空 41
EILSEQ 非法字节序列 42
STRUNCATE 字符串被截断 80
如果ferror返回值为0(假),表示未出错。
如果返回一个非零值,表示出错,好像标准中没有含义列表,正常对于流操作而言,个人猜测是否出错之前完成的字节数?不过没有试验过
司马苛银菊: int ferror ( FILE * stream ); Check error indicator Checks if the error indicator associated with stream is set, returning a value different from zero if it is. This indicator is generaly set by a previous operation on the stream that failed. Parameters stream ...
古田县19229146591: C语言如何读或写文件?
司马苛银菊: 对于文件,常用的3个: read/write 这是底层的系统调用 fread/fwrite 这是二进制的读写函数 fscanf/fprintf 这是格式化的读写函数
古田县19229146591: C语言的EOF函数到底是怎么工作的啊? - ?
司马苛银菊: C语言的EOF函数,主要工作是来判断文件是否结束.比如,下面这段代码就表示,如果不是文件结尾,就把文件的内容复制到屏幕上. int c; while ((c = fgetc(fp)) != EOF) { putchar (c); } EOF是End Of File 的缩写,EOF不是特殊字符,而...
古田县19229146591: C语言中有没有FLOOR函数 - ?
司马苛银菊: printf("%d\n",floor(i)); 应该是printf("%lf\n",floor(i));因为返回的是double型数据,而%d则强制转换为整数类型输出,所以出现异常
古田县19229146591: c语言修改文件中的制定数据 - ?
司马苛银菊: 1.fopen() fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此流相连接,给此流返回一个FILR指针. 参数filename指向要打开的文件名,mode表示打开状态的字符串...
古田县19229146591: 20分c语言文件结束EOF( - 1) - ?
司马苛银菊: 在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file).在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件.在文本文件中,数据都是以字符的ASCII代码值的形式存放. 一般...
古田县19229146591: c语言中的清屏函数clrscr()应该怎么用? - ?
司马苛银菊: c语言中的清屏函数clrscr的用法是: void clrscr(void); 程序例: #include <conio.h> int main () { int i; clrscr(); for (i = 0; i < 20; i++); cprintf("%d\r\n", i); cprintf("\r\nPress any key to clear screen"); getch(); clrscr(); cprintf("The screen has been ...
古田县19229146591: C语言中int属于标识符吗? - ?
司马苛银菊: 所谓标识符是指常量、 变量、语句标号以及用户自定义函数的名称.C语言规定标识符只能由字母、数字、 下划线组成,并且只能由字母、下划线开头.一些标识符被赋于特定的含义就叫做保留字(或称为关键字).int 是关键字,不能作为标识符
古田县19229146591: C语言中怎么实现两个超大整数的相加减乘除 - ?
司马苛银菊: #include <string.h> #include <stdio.h> #include <stdlib.h> #define N 100 int main(int argc, char const *argv[]) { char arr[N] = {}; gets(arr); char brr[N] = {}; gets(brr); int len1,len2,i = 0,j = 0; len1 = strlen(arr); len2 = strlen(brr); int len = len1>len2?len1:len...
古田县19229146591: C语言中printf的使用格式 - ?
司马苛银菊: printf("输出格式",变量名);这就是最简单的用法#include "stdio.h" void main() { int a; printf("please input a number:\n"); scanf("%d",&a); printf("%d\n",a); } 最简单的关于printf例子