|
1楼 初学者会犯一些意想不到的错误. 大家一起来讨论一下吧. printf,scanf putc , getc puts , gets getline, sscanf, fprintf, fscanf, fread, fwrite, fgetc, fputc 等等,各种函数使用起来应该注意哪些问题,如何规范使用. |
|
|
|
|
2楼 先是 printf 吧 ---------- printf 参数要和格式字符串中的顺序一一对应。%s 对应的记得要是地址(也就是指针或数组的名字)。 如 int i = 0; char c = 'G'; char * s = "a c style null-terminating string"; /* 这是错的,这个问题大家都知道,只是容易犯不小心的毛病,而且编译不会有错 */ printf("i = %d, c = %c, s = %s", c, i, s); ---------- %d, %x等之前要求的显示位数是最小值,并不是最大值,如果输出的变量位数小于所要求的,会补上足够的空格,使其输出占所要求的显示位数,变量值的数位大于所要求的,就会以需要的空间来显示。 如 int i = 555; printf("[%4d]\n", i); /* 输出为 [ 555] */ i = 55555; printf("[%4d]\n", i); /* 输出为 [55555] */ |
|
|
|
|
5楼 ------------------------------------------------------------- int i; float arrayf[10],temp; printf("请输入10个浮点数:"); for(i=0;i<10;i++) { scanf("%f",&temp); array[i]=temp; } ------------------------------------------------------------- float数组不能直接输入,而要借助于中间变量。 |
|
|
|
|
6楼 #include <stdio.h> #include <stdlib.h> int main(void) { float a[4]; int i; for(i=0;i<4;i++)scanf("%f",&a[i]); for(i=0;i<4;i++)printf("a[%d]=%f\n",i,a[i]); system("PAUSE"); return 0; } gcc3.3.1+mingw编译运行通过. |
|
|
|
|
7楼 ------------------ 这并不代表所有的编译器都可以通过,你用vc6.0试试,呵呵 为保证可移值性,我觉得还是用中间变量的好。 |
|
|
|
| 218.28.135.* |
14楼 |
|
|
| 211.98.106.* |
15楼 ------- do熊 |
|
|
| 59.64.233.* |
16楼 |
|
|
| 218.91.139.* |
17楼 outportb和inportb怎么用?功能是什么? |
|
|
| 211.67.58.* |
19楼 |
|
|
| 222.76.228.* |
20楼 可以实现吗? |
|
|
| 61.130.6.* |
22楼 main(){getchc);} 这是什么意思,还要写入主函数吗??????????????????回550316019QQ |
|
|
| 202.100.200.* |
25楼 |
|
|
| 221.212.216.* |
27楼 |
|
|
|
28楼 1。是否支持空格,例如 scanf("%s", sz_buf);就不能输入空格,如果字符串带有空格,将会分割成两个字符串。 2。是否可能导致缓冲溢出。gets在Unix + gcc是强制不让使用的,因为太容易缓冲溢出。同样,scanf也有类似问题。 3。缓冲问题,标准库函数 scanf, gets, fgets, printf, puts都是带缓冲的,这些缓冲是系统帮你实现,当然你也可以定制缓冲模式(全缓冲,行缓冲,不用缓冲)和缓冲区大小。输入输出缓冲优点就是提高效率,避免频繁的硬盘读写;缺点是如果你不理解缓冲机制,会带来莫名其妙的错误。 举例: char sz_tmp = "hello, world"; pid_t pid; pid = fork(); //开辟子进程,为简略起见,出错处理略。 if (pid == 0) { printf("%s\n", sz_tmp); exit(0); } else { wait(NULL); } 这个程序如果直接运行,输出一个“hello,world”,如果定位到文件,将输出两个“hello,world”。就是缓冲机制的实现导致(具体原因就不多讲,太长了,懒得写)。如果你不了解缓冲机制,当你的多线程程序在日志文件中每次操作都记录两次,肯定莫名其妙。 |
|
|
|
| 60.26.218.* |
29楼 我说一个: 输入单词用scanf(), 输入字符串最好别用gets(), 容易造成内存 覆写, 后果可能很严重,用fgets()来代替 |
|
|
| 220.240.194.* |
30楼 1、处理输入错误的时候,千万记得检查 scanf 的返回,否则说什么都是白搭 2、不要使用 fflush(stdin) !!!用 fgets 然后判定是否读取到 '\n' |
|
|
