[英]How can I compare the getchar() input with the previous input in getchar()?
我试图比较用户插入的两个输入(或更多)。 我使用getchar()函数但它似乎没有工作...我需要首先检查它的字母(英文)和如果连续不是2(或更多)大写或小写字母。 这是我做的:
Boolean CheckLetters() {
char ch1, ch2;
Boolean valid = TRUE, loop = TRUE;
printf("\nPlease enter char. When you are done press Enter.\n");
ch1 = getchar();
while (getchar() != 10);
if ((ch1>='A' && ch1<='Z') || (ch1>='a' && ch1<='z')) {
return valid;
}
ch2 = ch1;
printf("\nbdika1");
ch1 = getchar();
while (getchar() != 10);
while (loop)
{
if (ch1 != 10) {
if (((ch1 >= 'A' && ch1 <= 'Z') && (ch2 >= 'a' && ch2 <= 'z')) ||
((ch1 >= 'a' && ch1 <= 'z') && (ch2 >= 'A' && ch2 <= 'Z'))) {
ch2 = ch1;
printf("\nbdika2");
ch1 = getchar();
while (getchar() != 10);
}
else
{
valid = FALSE;
loop = FALSE;
}
}
else
{
loop = FALSE;
}
}
return valid;
}
有效的值返回到另一个函数,如果它的真实,则函数打印“正确”,如果为false则相反。现在为什么它不能正常工作..我无法弄清楚什么是错的,我插入ch2插入到ch1的值通过getchar()并接收新的并检查它,但返回的值不是假设要返回的值...
编辑:
好的,这是怎么回事。 我需要编写一个从用户那里获取字符串的函数(不使用数组或字符串),当用户按Enter键或空格键时,它将停止并在这种情况下打印“正确”:
a)如果用户输入0个字符。
b)如果用户输入了1个字符,那个字符就是一个字母。
c)如果字符串如下:AaAa或aBcD(彼此相邻的大写和小写)
在这种情况下,该函数打印“不正确”:
a)输入的字符不是字母
b)2个(或更多)大写/小写字母彼此相邻
“printf(”bdika“)(bdika意味着检查我的语言)只是为了检查”if“是什么。现在为什么我写的代码不起作用。请尽量帮助我理解那里的错误,哪些改变了我可以做。
注意打印由另一个函数完成,该函数从前一个函数中接收True或False。 如果收到true,则打印“正确”,否则“不正确”。
您的代码中存在多个问题:
你应该用int
类型定义ch1
和ch2
,因为getchar()
返回一个int
,它可以包含unsigned char
类型的所有值加上特殊值EOF
。 类型char
不能保存所有这些值,并且使用此类型无法可靠地检查文件末尾。
您应该使用字符常量而不是硬编码的数值:使用'\\n'
代替10
...
循环时始终检查EOF
,直到键入给定的字符,否则循环将在文件末尾无限期运行。
您不处理用户在提示符处直接命中的情况。 在这种情况下,冲洗回路不应运行。 您可以为此编写实用程序函数,以避免重复代码。
我不确定为什么当用户输入信件时你立即返回。 逻辑是模糊的,目标也没有明确说明。
编辑您最后澄清了用户输入的预期行为:一次只读取一个字符并重置返回值是字符不正确(不是字母)或者您检测到错误的序列(相同的情况)。
这是一个经过修改的独立版本:
#include <stdio.h>
typedef int Boolean;
#define TRUE 1
#define FALSE 0
Boolean CheckLetters(void) {
int valid = TRUE; // input is correct by default
int ch1, ch2;
// to avoid leaving characters in the input stream, the loop
// reads all characters typed by the user upto the <enter> key.
// return FALSE if an invalid character or an invalid sequence
// is detected.
printf("\nPlease enter chars. When you are done press Enter.\n");
for (ch1 = EOF;;) {
ch2 = ch1; // save previous character
ch1 = getchar();
if (ch1 == EOF || ch1 == '\n') {
// end of line or end of file, return status
return valid;
}
if (ch1 >= 'A' && ch1 <= 'Z') {
// character is uppercase letter,
// check if previous character if any is lowercase
if (!(ch2 == EOF || (ch2 >= 'a' && ch2 <= 'z'))) {
// invalid sequence, will return Incorrect status
valid = FALSE;
}
} else
if (ch1 >= 'a' && ch1 <= 'z') {
// character is lowercase letter,
// check if previous character if any is uppercase
if (!(ch2 == EOF || (ch2 >= 'A' && ch2 <= 'Z'))) {
// invalid sequence, will return Incorrect status
valid = FALSE;
}
} else {
// character is not a letter, Incorrect status
valid = FALSE;
}
}
}
int main(void) {
Boolean valid = CheckLetters();
if (valid) {
printf("Correct\n");
} else {
printf("Incorrect\n");
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.