gpt4 book ai didi

c - 如何将 getchar() 输入与 getchar() 中的先前输入进行比较?

转载 作者:太空宇宙 更新时间:2023-11-04 01:52:16 25 4
gpt4 key购买 nike

我正在尝试比较用户插入的两个(或更多)输入。我正在为它使用 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;
}

valid 的值被返回给另一个函数,如果它是 true,函数打印“correct”,如果是 false,则相反。现在不知何故它不能正常工作..我不知道出了什么问题,我将 ch2 插入 getchar() 插入到 ch1 的值并接收新值并检查它,但返回的值不是那个值假设要返回...

编辑:

好的,事情就是这样。我需要编写一个函数,从用户那里获取一串字符(不使用数组或字符串),当用户按下 Enter 键或空格键时,它会停止并在这种情况下打印“正确”:

a) 如果用户输入了 0 个字符。

b) 如果用户输入了 1 个字符,并且该字符是一个字母。

c) 如果字符串是这样的:AaAa 或 aBcD(大写和小写彼此相邻)

在这种情况下函数会打印“Incorrect”:

a) 输入的字符不是字母

b) 2个(或更多)大写/小写字母彼此相邻

"printf("bdika")(bdika 表示检查我的语言)只是为了检查“如果”是否为真。现在不知为什么我写的代码不起作用。请尝试帮助我了解哪里出了问题以及我可以做哪些改变。

注意 打印是由另一个函数完成的,它从前一个函数接收 True 或 False。如果它收到 true,它会打印“Correct”,否则打印“Incorrect”。

最佳答案

您的代码中存在多个问题:

  • 你应该定义 ch1ch2 类型为 int 因为 getchar() 返回一个 int 可以具有 unsigned char 类型的所有值 加上 特殊值 EOFchar 类型无法保存所有这些值,并且无法使用此类型可靠地完成文件末尾检查。

  • 您应该使用字符常量而不是硬编码的数值:使用 '\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;
}

关于c - 如何将 getchar() 输入与 getchar() 中的先前输入进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41081592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com