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