
C语言编程,关于getchar()
并且将两句字符串连在一起打印
当长度超过要求后,打印 错误提示
我用scanf可以写出,但是getchar()不是很懂应该怎么写,还有可以帮忙解释下strcat(a,b) (假设ab是两段字符串)
希望大神们可以帮帮我写下代码,感谢🙏 展开
getchar就是接收一个字符。strcat(a,b)就是将b字符串内容放在a字符串最后一个字符串后面,前提a字符串的内存地址必须能够容纳a,b字符个数的和,且内存地址不能重叠。
#include<stdio.h>
#include<string.h>
#include<malloc.h>
char *getSting(int maxLen);//读取字符串输入 最大读取长度maxlen。成功返回字符串,失败返回NULL
int main()
{
char *str1=getSting(50);
char *str2=getSting(50);
int len=strlen(str1)+strlen(str2)+1;
char str12[len];//用于保存拼接字符串的地址必须大于等于两个字符串长度和+1
str12[0]=0;
strcat(str12,str1);
strcat(str12,str2);
printf("拼接后的字符串为:%s\n",str12);
return 0;
}
char *getSting(int maxLen)//读取字符串输入 最大读取长度maxlen。成功返回字符串,失败返回NULL
{
int n=1;
char *str=(char *)malloc(sizeof(char)*(maxLen+1)),*strSave=NULL;
//预申请(maxLen+1)大小的内存空间
if(!str)
{
printf("异常!内存申请失败!\n");
return NULL;
}
memset(str,0,maxLen+1);
while(1)
{
str[n-1]=getchar();
if(n==maxLen+1 && str[n-1]!=10)//当输入字符已到最大
{
printf("输入超出数组上限!\n");
return NULL;
}
if(str[n-1]==10)//当输入回车,结束输入
{
strSave=(char *)realloc(str,sizeof(char)*(n+1));//释放未使用的内存
if(!strSave)
{
printf("异常!内存申请失败!\n");
return NULL;
}
str=strSave;
str[n-1]=0;
return str;
}
else
n++;
}
return NULL;
}
原型
extern char *strcat(char *dest, const char *src);
用法
#include <string.h>
头文件
在C中,函数原型存在 <string.h>头文件中。
在C++中,则存在于<cstring>头文件中。
功能
把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除*dest原来末尾的“\0”)。要保证*dest足够长,以容纳被复制进来的*src。*src中原有的字符不变。返回指向dest的指针。
说明
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
至于你的问题,你没说清这两个字符串是什么样的格式,是以回车分开还是写在一行,下面代码是假定以回车分开,一行算一个字符串
#include <stdio.h>
int main() {
char buffer[101];
int i,j=0,r=0;
int error=0;
char c;
while(r<2) {
i=0;
while((c=getchar())!='\n' && i<50) {
buffer[j++]=c;
i++;
}
if(i>=50) {
error=1;
break;
}
if(c=='\n') r++;
}
buffer[j]='\0';
if(error) printf("ERROR");
else printf("%s",buffer);
}
想再仔细问一下这个代码
问题1:之后的while(i<2)的作用是什么呢,变量r的作用是什么
问题2:在i++的时候是先将第一个字符串的内容逐字存到数组里,在j++的时候存第二个数组吗==
因为要计算输入多行内容,所以这里的r就是一个回车的计数,每读到一个\n就加1,当r为2的时候当然就是读入两行了,可以结束循环了
i++同样也只有计算每一行输入的内容有多少,超过50就设置错误标记,j++才是把内容存入数组,这里只有一个数组,没有什么第二个数组
可以将你的程序修改,在scanf之后增加一个语句,把标准输入的缓冲区读完:
scanf("%d", &a);
while (getchar()!='\n') ;
??我忘记设置悬赏了吗
额