C语言puts函数好gets函数的调用问题:为什么通过Menu()函数调用的puts()和gets()函数输出异常?

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
//////////////////////////////////////////////////

void Prove_dizhi()
{
int a[2][5]={0};
printf("二维数组 a[2][5]中, a的值为:%d\n\n\n",a);
for(int i=0;i<2;i++)
{
printf("二维数组a[i][j]中,a[%d]的值为:%3d &a[%d]的值为:%-3d \n\n",i,a[i],i,&a[i]);
for(int j=0;j<5;j++)
{
printf("a[%d][%d]的值为:%-3d &a[%d][%d]的值为:%-3d \n",i,j,a[i][j],i,j,&a[i][j]);
}
printf("\n");
}
printf("以上证明了:a等效于------a[0],等效于------&a[0],等效于------&a[0][0]\n\n");
printf("并进一步证明了:a[i]等效于-------&a[i]等效于-----&a[i][0] \n");
}//验证了解二维数组的地址
//////////////////////////////
void Prove_char()
{
char s[3]={'a','b'};
for(int i=0;i<3;i++)
{
printf("%c\n",s[i]);
}
}
//////////////////////////////
void Prove_string()
{
char str[20];
printf("请输入长度少于20的字符串:\n");
gets_s(str);
printf("你输入的子符为:\n");
puts(str);
}/////////////////////////////////////////问题:为什么Menu菜单函数调用时会出错??????
void Prove_strcat()
{
char str1[5],str2[2];
cout<<"请输入字符串1的值为:"<<endl;
cin>>str1;
cout<<"字符串1为:"<<endl;puts(str1);
cout<<"请输入字符串2的值为:"<<endl;
cin>>str2;
cout<<"字符串2为:"<<endl;puts(str2);
cout<<"连接后形成的西字符串为:"<<endl;
puts(strcat(str1,str2));

}
void Menu()
{
a: system("cls");
cout<<"实验函数"<<endl
<<"1. 证明二维数组的地址值"<<endl
<<"2. 证明字符数组的一些功能"<<endl
<<"3. 证明字符串输入输出函数的功能"<<endl
<<"4. 证明字符串连接函数的功能"<<endl
<<"请选择:"<<endl;
int n;
cin>>n;
switch(n)
{
case 1:
{
Prove_dizhi();
system("pause");
goto a;
}
case 2:
{
Prove_char();
system("pause");
goto a;
}
case 3:
{
system("cls");
Prove_string();
system("pause");
goto a;
}
case 4:
{
Prove_strcat();
system("pause");
goto a;
}
case 5:
{
Prove_copy();
system("pause");
goto a;
}
}
}////////////////////////////////////////////////
int main()
{

Menu();
return 0;
}
//了解二维数组地址的代码

要清空输入缓冲区,在 Prove_string() 中加入句:
fflush(stdin);
其次是,函数 Prove_copy() 未定义,我定义了一个空的。
修改后如下:
void Prove_string()
{
char str[20];
printf("请输入长度少于20的字符串:\n");
// 清空输入缓冲区
fflush(stdin);
gets(str);
printf("你输入的子符为:\n");
puts(str);
}/////////////////////////////////////////问题:为什么Menu菜单函数调用时会出错??????追问

谢了,我明白了!!!!!

追答

评个满意回答怎么样?以后加好友有问题可以问。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-08-12
void Prove_string()
{
char str[20];
printf("请输入长度少于20的字符串:\n");
gets_s(str);//此句错误,应为 gets(str);
printf("你输入的子符为:\n");
puts(str);
}/////////////////////////////////////////问题:为什么Menu菜单函数调用时会出错??????追问

不是的,我的额编译器提醒我将gets()改为gets_s()的.....
不是这句的问题,哥们儿,在你的编译器上运行一下,选择3时,你就会发现错误了!!!!!

C语言puts函数好gets函数的调用问题:为什么通过Menu()函数调用的puts...
fflush(stdin);gets(str);printf("你输入的子符为:\\n");puts(str);}\/\/\/问题:为什么Menu菜单函数调用时会出错???

c语言中gets()和puts()的问题
字符串输出的话要是不遇到'\\0'是不会停止的,你试试给abc[0]赋一个值,用puts(abc)应该照样会输出好多东西!!所以要把char数组当字符串输出的话,最好要在数组的结尾处加个'\\0'

c语言中,gets()和puts()函数与getchar()与putchar()函数有何区别
puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为: puts(s);其中s为字符串变量(字符串数组名或字符串指针),puts()函数的作用与语printf("%s\\n", s)相同。gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符不属于这个字符串。其调用格式为: gets(s);s为字...

C语言结构体为什么用gets和puts输入和输出 经常出现错误?
这个事实导致gets函数只适用于玩具程序,为了避免这种情况,我们可以用fgets(stdin) (fgets实际上可以读取标准输入(即大多数情况下的键盘输入),具体参阅fgets词条)来替换gets()。在V7的手册(1979年)中说明:为了向后兼容,gets删除换行符,gets并不将换行符存入缓冲区。

C语言中如何用 gets(),put()
gets()、puts()都是针对字符串类型处理的,传入的参数是char *型,或char[]型 gets()是输入字符串函数,puts()是字符串输出函数 例如:char *a;gets(a);或者:char a[10];gets(a);相当于:scanf("%s",a);输出函数:puts(a);相当于:printf("%s\\n",a);...

C语言puts与gets问题
puts --> 把字符串输出到屏幕。如:char s[]="hello";puts(s);gets --> 从键盘输入字符串,包括空格。如:char str[128];gets(str);printf --> 格式化输出到屏幕。可以以不同的格式把参数输出到屏幕。如:char s[]="china";printf("%s", s);\/\/以字符串的格式把s输出到屏幕 int a ...

c语言gets()、puts()
scanf函数 将空格视为一个字符串的结束 回车也是结束 而gets函数 将回车视为字符串结束 建议看 "程序这东西 第二版"网上有这本书,轻松搞笑 愉快的学习程序 希望你看完之后 有很大收获。

C语言关于gets函数输入串长度问题!
而为什么puts和printf可以打印到8是因为再8后面才遇到'\\0';为什么for只输出4个数;是因为你用的32位编译器,所以sizeof(st)==4;如果你用64的编译器,那么sizeof(st)==8;因为指针大小再32是4个字节,64位8个字节!好了,老板的4个问题都帮你分析了!给财富值200;...

C语言中gets()函数相关问题
你把修改过的程序中的scanf("%d",&m); 修改为scanf("%d\\n",&m);应该就可以了。因为如果之前没有\\n的话,那么gets()的就是那一行,那么他就直接把之前printf的“m=”也输入进去了,会有错误的。完毕。

c语言 gets函数 puts函数
1.puts(字符数组):将一个字符串(以'\\0'结束的字符序列)输出到终端。由于printf函数可以输出字符串(%S),因此puts函数不常用。用puts函数可以输出的字符串可以包含转义字符!在输出时将字符串结束标志'\\0'转换成'\\n',即输出完字符串后换行。2.gets(字符数组):从终端输入一个字符串到字符数组...

相似回答