| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 466 人关注过本帖
标题:[求助]关于输入的问题
只看楼主 加入收藏
lucis009
Rank: 1
等 级:新手上路
帖 子:181
专家分:0
注 册:2007-5-2
收藏
 问题点数:0 回复次数:5 
[求助]关于输入的问题
#include<stdio.h>
int main()
{
int i;
gets(i);
return 0;
}
上述程序我在WINTC中能编译,但VC不能,我觉得这里有语法错误,但书上的程序是这样写的,不明白
搜索更多相关主题的帖子: 输入 
2007-07-04 03:41
magini
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-7-4
收藏
得分:0 
首先如果你在vc上,建议加
#include <iostream.h>

另外关于gets函数,我之前也有些疑惑,因为在测试时发现一些问题:

有一程序如下:
#include <stdio.h>
#include <iostream.h>
void main()
{ //printf("j\n");
cout<<"j\n";
char str[10];
gets(str);
cout<<"453";
puts(str);
printf("%s\n",str);
}
输入china,则输出是
china
china
china
j
453

后来咨询知道cout、puts所用的缓冲区不是一个。所以在输入缓冲区有可能导致出问题。
cout缓冲区充满后一起输出。
改为:
void main()
{
cout<<"j\n"<<flush;
char str[10];
gets(str);
cout<<"453"<<flush;
puts(str);
printf("%s\n",str);
}
就按顺序了

还有,buf是接收输入的缓冲区,比如char buf[80];fgets(buf, 79, stdin);buf[strlen(buf) - 1] = '';比如你输入"12345",然后回车,程序实际接收到的输入是"12345\n",用gets的时候gets会去除结尾的'\n',而fgets不 会去除结尾的'\n',buf[strlen(buf) - 1] = '';的作用是把字符串的最后一个字符('\n')去掉。相应的,puts输出的时候会在输出的字符串结尾加上'\n',fputs就不会。

1、gets函数会在末尾自动加'\0'的,不用担心。

2、gets函数有安全隐患,接收数组的大小它不知道,所以可以随意输入很长的数组,内容可以写入内存,但编译运行会报错。

3、推荐使用fgets函数代替gets函数,fgets(line,sizeof(line),stdin)它会检查数组大小。截掉多余的字符。

另外关于return 0;
也想说明几点:
在c++里main好像只能是int返回类型,不能是void类型的。main返回void不符合C++语言标准,但好多编译器支持。
DEV-C++就不支持,以前在用VC6或BCB6时,就是写void main() 但是在DEV-C++中就总是报错,在CSDN中寻找帮助后,从此就只写int main() return 0;的。 return 0;表示执行成功返回0,也可以写成:exit (0);道理和功能一样!返回1或其他值,那么表示执行失败!

int main()
return 0; 正常退出 ---> exit(0);
return 1; 异常退出 ---> exit(1); ---> about();以前驻留进程通常采用的一种方式。

这个0就为了让系统知道,运行完成返回的,

如果你没有返回类型的话,编译的时候默认为返回int,而且值不定。

如果不是main函数返回参数,可以作为结果来处理。

2007-07-04 04:13
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
收藏
得分:0 
人家问C,你回答C++

版主,LS的是砸场子的阿

编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-07-04 09:19
magini
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-7-4
收藏
得分:0 
回复:(酒肉弥勒佛)人家问C,你回答C++版主,LS的...

呵呵,不是不是,
只是在两者之间都遇到类似的问题,
我这个人比较直,有什么说什么,别见怪哦~

2007-07-04 18:34
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复:(magini)首先如果你在vc上,建议加#include ...
那怎么输入 汉字字符呢  ??

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2007-08-12 17:29
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
错误
get的参数类型是 char *
而i至char *无法强制转换

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-12 17:38
快速回复:[求助]关于输入的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014706 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved