|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
#include<Windows.h>
int main()
{
char ch1[100]={0};
char ch2[100]={0};
int n;
printf("请输入要输入的个数:");
scanf("%d",&n);
fgets(ch1,n,stdin);
fgets(ch2,n,stdin);
char *ptr1=ch1;
char *ptr2=ch2;
char*ptr=ptr1;
while(*ptr1++==*ptr2++&&*ptr1);
if(ptr1-ptr==strlen(ch1))
printf("一样");
else
printf("不一样");
}
请问这样写为什么ch2数组无法输入了?
2#楼大佬说的意思是:在数据输入缓冲区中,当你使用scanf接收数据n,在按下回车键后,会有一个'\n'换行符留在缓冲区中,这个换行符会在第一次使用fgets时作为结束符号被接收了,相当于第一个字符串是空的,而你接下来输入的字符串会作为字符串2的内容:
scanf:遇到\0停止读取,不包含换行符
fgets:遇到换行符停止读取,包含换行符
输入n的值(缓冲区:n\0)->按下回车(缓冲区:n\0\n)->scanf读取(把n读取掉了,缓冲区:\n)->fgets(将换行符\n当做一个没有任何元素的空字符串读取掉了,缓冲区:)->继续输入(缓冲区:字符串)->按下回车(缓冲区:字符串\n)->fgets(将换行符\n以及字符串一起读取掉了,缓冲区:)
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int main()
- {
- char ch1[100]={0};
- char ch2[100]={0};
- int n;
- printf("请输入要输入的个数:");
- scanf("%d",&n);
- getchar();//关键在这里,将还留存在缓冲区的换行符读取掉,避免干扰后续的fgets读取
- fgets(ch1,n+2,stdin);
- fgets(ch2,n+2,stdin);
-
- char *ptr1=ch1;
- char *ptr2=ch2;
- char*ptr=ptr1;
- while(*ptr1++==*ptr2++&&*ptr1);
- if(ptr1-ptr==strlen(ch1))
- printf("一样\n");
- else
- printf("不一样\n");
-
- return 0;
- }
复制代码
|
|