C语言输入输出大讨论

到百度贴吧首页
新闻   网页   贴吧   知道   MP3   图片   视频   百科
    吧内搜索 | 帮助

C语言输入输出大讨论

1楼

输入输出是C语言中一个重要的人机交互界面,
初学者会犯一些意想不到的错误.
大家一起来讨论一下吧.
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] */

3楼

打字好累,先休息一下

4楼

怎么不继续了?等我考试结束了,我会进行大总结的.希望大家多多讨论,到时候我可以把大家的智慧总结得好一些.

5楼

输入float数组问题:
-------------------------------------------------------------
int i;
float arrayf[10],temp;
printf("请输入10个浮点数:");
for(i=0;i<10;i++)
{
 scanf("%f",&temp);
 array[i]=temp;
}
-------------------------------------------------------------
float数组不能直接输入,而要借助于中间变量。

6楼

do能,你这是从哪听来的?不对的.
#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楼

gcc3.3.1+mingw编译运行通过. 
------------------
这并不代表所有的编译器都可以通过,你用vc6.0试试,呵呵
为保证可移值性,我觉得还是用中间变量的好。

8楼

是吗?你用VC6.0运行我的程序看看,会有什么问题?

9楼

for(i=0;i<4;i++)printf("a[%d]=%f\n",i,a[i]);
都是0!

10楼

do熊,你用的是什么VC啊?我用VC6.0编译我的程序,运行起来完全正常!

11楼

????
那个创天中文版呀(学校机房的)

12楼

完全一样,怎么到你那里就是0了?肯定是你操作和我不一样.

13楼

我可以负责任地告诉你,
你的VC有问题,或者你没把程序CP全了,
后果将会很严重.嘿嘿.

218.28.135.*

14楼

尔等好幸福,我一落魄软件蓝领
211.98.106.*

15楼

刚刚在我的机子上试了下,assiss是对的。(我用的DEV C++ 4.0)

-------
do熊

59.64.233.*

16楼

请问:怎样把输出写入一个文件中?
218.91.139.*

17楼

考你们一下
outportb和inportb怎么用?功能是什么?

18楼

do熊是对的
我的编译器就通不过

211.67.58.*

19楼

谁知道哪里可以找到c语言错误提示的所有信息啊?
222.76.228.*

20楼

在gets(choice);的时候如何能够做到在20秒之内不输入就作下一步操作?
可以实现吗?

21楼

数据输入输出需要注意什么?
61.130.6.*

22楼

大虾们你们好我想请问一下我的TC开发平台中有主这样一句话”include<conio.h>
main(){getchc);}
这是什么意思,还要写入主函数吗??????????????????回550316019QQ

23楼

没有这一说吧 不知道do熊同学从哪裏聼来的

24楼

而且我本著认真负责的态度在VC6.0(EN) + SP6上测试过 没有什麽不对 估计是do熊同学输入的时候格式不正确
202.100.200.*

25楼

bu dong

26楼

创天中文版vc++6.0这个版本有bug不要用它,要用就要用英文版的。
我的老师曾告诉过我她在使用创天中文版vc++6.0时,发现了很多的问题。

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'

发表回复

内 容:
用户名:
  
©2010 Baidu 贴吧协议  意见反馈