C语言数组符号

//1.主函数中设计一个菜单。菜单中可选择"输入字符串"、"链接字符串"、"查找字符"、"查找字符串"等功能。
//用switch-case语句选择完成相应功能的函数。
//2. "输入字符串"函数中要求输入两个字符串,第一个用gets()函数输入,第二个用getchar()函数输入。
//3. "链接字符串"函数要求先判断两个函数的长度,然后将较长的字符串连接在较短的字符串之后。
//4.在"查找字符"函数中先输入一个要查找的字符,函数返回该字符在字符数组中的下标。
//5. 在"查找字符串"函数中先输入一个要查找的字符串,如"aaaa",函数返回该字符串第一个字符在字符数组中的下标。

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "ctype.h"
void f1(char st1[],char st2[]);
void f2(char st1[],char st2[]);
int main()
{
char st1[20],st2[20];
int c=6;
printf("*************************\n");
printf("1.输入字符串\n");
printf("2.链接字符串\n");
printf("3.查找字符\n");
printf("4.查找字符串\n");
printf("5.退出\n");
printf("*************************\n");
while(1)
{
scanf("%d",&c);
switch(c)
{
case 1:f1(st1,st2);
break;
case 2:f2(st1,st2);
break;
case 3:
break;
case 4:
break;
case 5:
break;
default:printf("请输入1~5之间的数字!\n");
}
if(c==5) break;
}
return 0;
}

void f1(char st1[],char st2[])
{
int i=0;
while((st1[i++]=getchar())!='\n');
gets(st2);
}

void f2(char st1[],char st2[])
{
int a,b;
a=strlen(st1);
b=strlen(st2);
if(a>=b)
printf("%s",strcat(st1,st2));
else
printf("%s",strcat(st2,st1));
}

不知道为什么 STR1就是不能输入.求解

scanf等输入函数的连续调用可能会出现的问题。你一次调用scanf时将输入送进内存时健入的回车键也是一个字符,而这次调用并不会接它,回车仍保留在输入流中,因此当你接下来调用getchar的时候,正好把输入流中的回车“0xa”读了进来,直接等于了'\n',因此实际你的程序进入f1后直接就向下执行直至f1退出了。追问

那怎么办?

追答

void f1(char st1[],char st2[])
{
int i=0;
fflush(stdin);
while((st1[i++]=getchar())!='\n');
gets(st2);
}
改成这样就行了,fflush(stdin); 就是清除输入输入缓冲区的。

话说,我都告诉你原理了,你不会继续google求解么?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-08
路过
第2个回答  2012-05-02
楼主忘记给字符串开辟地址了吧,添一句malloc开辟地址的那个试试

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网