12.1 这段代码有什么问题?
char c; while((c = getchar()) != EOF) ...
12.1b 我有一个简单的程序,它读取字符直到遇到 EOF,但我如何才能实际从键盘上输入那个“EOF”值?我看到EOF在<stdio.h>中定义为-1;我应该输入-1吗?
12.2 为什么简单的行复制循环while(!feof(infp)) { fgets(buf, MAXLINE, infp); fputs(buf, outfp); }会复制最后一行两次?
12.3 我正在使用fgets将文件中的行读取到指针数组中。为什么所有行最终都包含最后一行副本?
12.4 我的程序的提示和中间输出并不总是显示在屏幕上,尤其是在我通过另一个程序管道输出时。
12.5 如何一次读取一个字符,而不必等待 RETURN 键?
12.6 如何打印一个'%'格式字符串中打印一个printf,但不起作用。\%答
12.7 为什么不
long int n = 123456; printf("%d\n", n);的函数调用是否会工作?
12.8 我认为 ANSI 函数原型应该可以防止参数类型不匹配。
12.9 有人告诉我使用%lf与printf是不对的。如何printf使用%f用于类型double,如果scanf需要%lf?
12.9b 什么printf这样的size_t使用什么格式化字符串,而我不知道它是long还是其他类型?
12.10 如何用实现可变字段宽度printf也就是说,不是像%8d那样,而是希望宽度在运行时指定。
12.11 如何打印带千位分隔符的数字?
货币格式的数字呢?
12.12 为什么调用scanf("%d", i)的函数调用是否会工作?
12.12b 为什么调用
char s[30]; scanf("%s", s);在传递给&scanfscanf.
12.13 为什么这段代码不
double d; scanf("%f", &d);的函数调用是否会工作?
12.14 为什么代码不
short int s; scanf("%d", &s);的函数调用是否会工作?
12.15 如何在指定可变宽度scanf格式字符串?
12.16 如何读取具有特定格式的数据文件?
如何读取十个浮点数而不必使用一个费劲的scanf格式
字符串,例如"%f %f %f %f %f %f %f %f %f %f"?
如何将一行中任意数量的字段读取到数组中?
12.17 当我从键盘读取数字时scanf和 y"%d\n"格式,就像这样
int n; scanf("%d\n", &n); printf("you typed %d\n", n);它似乎会挂起,直到我输入额外的行。
12.18a 我正在读取一个数字scanf和%d读取一个数字,然后使用gets():
int n; char str[80]; printf("enter a number: "); scanf("%d", &n); printf("enter a string: "); gets(str); printf("you typed %d and \"%s\"\n", n, str);读取一个字符串,但编译器似乎跳过了对gets()!
12.18b 我正在使用scanf %c来读取Y/N的响应,但之后的输入被跳过了。
12.19 我想我可以用scanf通过检查其返回值来确保用户输入了我期望的数字值,从而使其更安全
int n; while(1) { printf("enter a number: "); if(scanf("%d", &n) == 1) break; printf("try again: "); } printf("you typed %d\n", n);但有时它似乎会进入无限循环。为什么?[脚注]
12.20 为什么大家都说不要用scanf?我应该用什么来替代?
12.21 我如何知道对于任意sprintf调用所需的缓冲区空间有多大?我如何避免目标缓冲区溢出?sprintf?
12.22 关于sprintf的返回值有什么说法?它返回的是一个int和char *?
12.23 为什么大家都说不要用gets()?
12.24 我本想检查errno在一长串printf调用之后,看看它们是否有失败的。
errno = 0; printf("This\n"); printf("is\n"); printf("a\n"); printf("test.\n"); if(errno != 0) fprintf(stderr, "printf failed: %s\n", strerror(errno));当我将输出重定向到文件时,为什么它会打印出像“printf failed: Not a typewriter”(printf 失败:不是打字机)这样的奇怪信息?
12.25 之间的区别是什么fgetpos/fsetpos和ftell/fseek?
什么是fgetpos和fsetpos有什么好处?
12.26a 如何刷新待处理的输入,以便用户的预输入不会在下一个提示时被读取?会fflush(stdin)的函数调用是否会工作?
12.26b 如果fflush不起作用,我能用什么来刷新输入?
12.27 我写了这个例程,它应该打开一个文件
myfopen(char *filename, FILE *fp) { fp = fopen(filename, "r"); }但是当我像这样调用它时
FILE *infp; myfopen("filename.dat", infp);但infp变量在调用者中未能正确设置。
12.28 我甚至无法获得一个简单的fopen调用工作!这个调用有什么问题?
FILE *fp = fopen(filename, 'r');
12.28b 如何打开像“file1'', ``file2'', ``file3'' 等文件,其中数字部分由变量控制?基本上我想要 ``file%d'',就像printf.
12.29 fopen在某些路径名下失败。
12.30 我试图在原地更新文件,使用fopenmode"r+"读取一个字符串,然后写回一个修改后的字符串,但它不起作用。
12.31 如何在文件中间插入或删除一行(或记录)?
12.32 如何在给定一个打开的流的情况下恢复文件名?
12.33 如何重定向stdin或stdout到程序中的一个文件?
12.34 一旦我使用了freopen,我该如何找回原来的stdout(或stdin)?
12.35 我如何知道标准输入或输出是否被重定向(即“<'' 或 ``>”?
12.36 我正在尝试编写一个类似“more'' 的程序。如果stdin被重定向了,我该如何回到交互式键盘?
12.36b 如何安排输出同时去两个地方,例如到屏幕和文件?
12.37 我想在文件和内存之间以一次一个字节的方式读写数字,而不是像fprintf和fscanf那样作为格式化字符。我该怎么做?
12.38 如何正确读取二进制数据文件?我偶尔会看到0x0a和0x0d值被损坏,如果数据包含值0x1a.
12.39 我正在为二进制文件编写一个“过滤器”,但是stdin和stdout被预先打开为文本流。我该如何将它们的模式更改为二进制?
12.40 文本和二进制 I/O 之间有什么区别?
12.41 如何从数据文件中读/写结构?
12.42 如何编写代码来符合这些旧的二进制数据文件格式?
12.43 我正在将用户输入的字符串读入一个数组,然后稍后将它们打印出来。当用户输入一个像\n,为什么它没有被正确处理?