繁体   English   中英

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

[英]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类型定义ch1ch2 ,因为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM