目录
我们知道在输入时会有一个类似的 “数据缓冲区”,往往做题时,题目会给在进行多组输入的要求、
例如:
在遇到这种问题通常我们会在输入的后面打一个回车,来表示我们的输入完成;但这样通常会单独留下 '\n' 什么意思呢?让我们用一个题来说明
“错误演示”
根据这道题我们先写出一下代码
#include <stdio.h>
#include <string.h>
int main()
{
int ch = 0;
char arr[10] = { "AaEeIiOoUu" };
while (scanf("%c", &ch) != EOF)
{
if (strchr(arr, ch))
{
printf("Vowel\n");
}
else
{
printf("Consonant\n");
}
}
return 0;
}
当我们输入这样的一个代码时,我们试着运行一下
我们可以看到 代码的结果无论是输入什么都会输出两个 Vowel 这是为什么呢???
上面说到我们有一个“数据缓冲区” 在我们输入一个字母的时候我们要按一下回车才出来结果,这就相当于我们现在有了两个字符 ,一个是我们输入的字母一个是‘\n’
此时当我们下一个循环读取时,它会把 \n 读取到循环中 这样的话就达不到我们想要的结果
“解决办法”
1) 用gechar(); 去读取这个 '\n' 代码如下
#include <stdio.h>
#include <string.h>
int main()
{
int ch = 0;
char arr[10] = { "AaEeIiOoUu" };
while ((ch = getchar()) != EOF)
{
if (strchr(arr,ch)) //stcchr是判断ch是否在字符串中出现
//如果出现则返还字符串中的地址
{
printf("Vowel\n");
}
else
{
printf("Consonant\n");
}
getchar(); //处理\n
}
return 0;
}
2)在%c后面加个\n,代码如下
#include <stdio.h>
#include <string.h>
int main()
{
int ch = 0;
char arr[10] = { "AaEeIiOoUu" };
//在%c前加一个空格,会消化前面所有空白字符,然后读取下一个字符
while (scanf("%c\n",&ch) != EOF)
{
if (strchr(arr, ch))
{
printf("Vowel\n");
}
else
{
printf("Consonant\n");
}
}
return 0;
}
3)在%c前面加空格 代码如下
#include <stdio.h>
#include <string.h>
int main()
{
int ch = 0;
char arr[10] = { "AaEeIiOoUu" };
//在%c前加一个空格,会消化前面所有空白字符,然后读取下一个字符
while (scanf(" %c",&ch) != EOF)
{
if (strchr(arr, ch))
{
printf("Vowel\n");
}
else
{
printf("Consonant\n");
}
}
return 0;
}
可能还有很多方法,这里只讲到了三个,评论区可以说出来一起学习。