当前位置: 代码迷 >> C语言 >> [求助]关于输入的问题
  详细解决方案

[求助]关于输入的问题

热度:148   发布时间:2007-07-04 03:41:31.0
[求助]关于输入的问题
#include<stdio.h>
int main()
{
int i;
gets(i);
return 0;
}
上述程序我在WINTC中能编译,但VC不能,我觉得这里有语法错误,但书上的程序是这样写的,不明白
搜索更多相关的解决方案: 输入  

----------------解决方案--------------------------------------------------------
首先如果你在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函数返回参数,可以作为结果来处理。

----------------解决方案--------------------------------------------------------
人家问C,你回答C++

版主,LS的是砸场子的阿

----------------解决方案--------------------------------------------------------
回复:(酒肉弥勒佛)人家问C,你回答C++版主,LS的...

呵呵,不是不是,
只是在两者之间都遇到类似的问题,
我这个人比较直,有什么说什么,别见怪哦~
----------------解决方案--------------------------------------------------------
回复:(magini)首先如果你在vc上,建议加#include ...
那怎么输入 汉字字符呢  ??
----------------解决方案--------------------------------------------------------
错误
get的参数类型是 char *
而i至char *无法强制转换
----------------解决方案--------------------------------------------------------
  相关解决方案