user-0 提问: 新手问题

回复:
user: user-1
content: 引用 8 楼 u014539580 的回复:[quote=引用 6 楼 cfjtaishan 的回复:] struct information  { char uid[20];    //注意结构体对齐 char name[10]; char sex; };  ?这两种有什么区别呢，我用sizeof算出来的都是31啊[/quote] 嗯，是的。因为这三个结构体成员的类型都是char类型的。

user: user-2
content: 引用 5 楼 jwj070524 的回复:[quote=引用 2 楼 u014539580 的回复:] [quote=引用 1 楼 jwj070524 的回复:]  if( fprintf(fp,"%s %s %c\n",xu.name,xu.uid,xu.sex) )   return 0;  这写错了吧，fprintf返回输出的字符数，如果没错，返回非0，然后就直接return了，fp中缓存的数据还没刷到文件上呢  非常感谢，的确是这的问题，但是对这个fprint还是没了解清楚，为什么fprint的返回值都有了，fp的数据还没到文件上，计算机内部具体是怎么工作的，能详细说一下吗？非常感谢！@jwj070524[/quote]  因为FILE类型内部有缓冲的，缓冲就是预先获取一块内存，比如1KB，4KB，留着，当你用fprintf时，首先将数据写到缓冲上，就是直接写到内存上，之所以不直接写到文件是因为写文件很费时（相对于写内存）。接着当缓冲写满时，自动将数据一次性写到文件上。当然了，关闭文件的话fclose函数会自动将缓冲区中的数据刷到文件。所以如果你打开文件写入数据的话，一定要记得fclose，否则缓冲没写满，程序退出，文件上可能什么都没有。[/quote]   太好了刚刚需要这个提示！

user: user-0
content: 引用 6 楼 cfjtaishan 的回复:struct information  { char uid[20];    //注意结构体对齐 char name[10]; char sex; };  ?这两种有什么区别呢，我用sizeof算出来的都是31啊

user: user-3
content: if( fprintf(fp,"%s %s %c\n",xu.name,xu.uid,xu.sex) )   return 0;  这写错了吧，fprintf返回输出的字符数，如果没错，返回非0，然后就直接return了，fp中缓存的数据还没刷到文件上呢

user: user-1
content: struct information  { char uid[20];    //注意结构体对齐 char name[10]; char sex; };

user: user-3
content: 引用 2 楼 u014539580 的回复:[quote=引用 1 楼 jwj070524 的回复:]  if( fprintf(fp,"%s %s %c\n",xu.name,xu.uid,xu.sex) )   return 0;  这写错了吧，fprintf返回输出的字符数，如果没错，返回非0，然后就直接return了，fp中缓存的数据还没刷到文件上呢  非常感谢，的确是这的问题，但是对这个fprint还是没了解清楚，为什么fprint的返回值都有了，fp的数据还没到文件上，计算机内部具体是怎么工作的，能详细说一下吗？非常感谢！@jwj070524[/quote]  因为FILE类型内部有缓冲的，缓冲就是预先获取一块内存，比如1KB，4KB，留着，当你用fprintf时，首先将数据写到缓冲上，就是直接写到内存上，之所以不直接写到文件是因为写文件很费时（相对于写内存）。接着当缓冲写满时，自动将数据一次性写到文件上。当然了，关闭文件的话fclose函数会自动将缓冲区中的数据刷到文件。所以如果你打开文件写入数据的话，一定要记得fclose，否则缓冲没写满，程序退出，文件上可能什么都没有。

user: user-4
content: fprintf, fwprintf Print formatted data to a stream.  int fprintf( FILE *stream, const char *format [, argument ]...);  int fwprintf( FILE *stream, const wchar_t *format [, argument ]...);  Function Required Header Compatibility  fprintf <stdio.h> ANSI, Win 95, Win NT  fwprintf <stdio.h> or <wchar.h> ANSI, Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  fprintf returns the number of bytes written. fwprintf returns the number of wide characters written. Each of these functions returns a negative value instead when an output error occurs.   Parameters  stream  Pointer to FILE structure  format  Format-control string  argument  Optional arguments  Remarks  fprintf formats and prints a series of characters and values to the output stream. Each function argument (if any) is converted and output according to the corresponding format specification in format. For fprintf, the format argument has the same syntax and use that it has in printf.  fwprintf is a wide-character version of fprintf; in fwprintf, format is a wide-character string. These functions behave identically otherwise.   Generic-Text Routine Mappings  TCHAR.H Routine  _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined  _ftprintf fprintf fprintf fwprintf    For more information, see Format Specifcations.  Example  /* FPRINTF.C: This program uses fprintf to format various  * data and print it to the file named FPRINTF.OUT. It  * then displays FPRINTF.OUT on the screen using the system  * function to invoke the operating-system TYPE command.  */  #include <stdio.h> #include <process.h>  FILE *stream;  void main( void ) {    int    i = 10;    double fp = 1.5;    char   s[] = "this is a string";    char   c = '\n';     stream = fopen( "fprintf.out", "w" );    fprintf( stream, "%s%c", s, c );    fprintf( stream, "%d\n", i );    fprintf( stream, "%f\n", fp );    fclose( stream );    system( "type fprintf.out" ); }   Output  this is a string 10 1.500000   Stream I/O Routines  See Also   _cprintf, fscanf, sprintf

user: user-4
content: fprintf返回的是成功写入文件的字节数。

user: user-0
content: 引用 1 楼 jwj070524 的回复: if( fprintf(fp,"%s %s %c\n",xu.name,xu.uid,xu.sex) )   return 0;  这写错了吧，fprintf返回输出的字符数，如果没错，返回非0，然后就直接return了，fp中缓存的数据还没刷到文件上呢  非常感谢，的确是这的问题，但是对这个fprint还是没了解清楚，为什么fprint的返回值都有了，fp的数据还没到文件上，计算机内部具体是怎么工作的，能详细说一下吗？非常感谢！@jwj070524