C getchar 循环获取用户的整数输入 - [如何改进]

标签 c loops input getchar

有更优雅的方法来完成这项任务吗?

程序要求用户输入整数,如果输入非数字字符则重复。 要退出循环需要满足两个条件: a) 所有输入的字符都是数字 b) 最后一个字符是 '\n'

像 scanf 这样的短解决方案无法正常工作,其他方法需要大量变量循环和 if else 条件。用户输入是常见任务,我希望有适当的可重用模板。

欢迎提出主观意见。简化此功能的方法或有关其他解决方案的建议。改进格式。阅读以获得更系统的理解。

#include <stdio.h>

int getIntOnly();

int main() {
    int x = 0;
    x = getIntOnly();
    printf("\nvalue entered is: %d \n", x);
}

int getIntOnly() {
    int ch, num, quit, abc;

    do {
        num = 0;
        ch = 0;
        quit = 0;
        abc = 0;
        printf("Enter the input: ");

        do {
            ch = getchar();
            if (ch >= 48 && ch <= 57) {
                num = num * 10 + (ch - 48);
            }
            else if (ch == '\n') {
                quit = 1;
            }
            else {
                abc = 1;
            }

        }
        while (quit == 0);

    }
    while (quit == 0 || abc == 1);
    return (num);
}

最佳答案

使用fgets()意味着您将立即获得全文。 然后您可以检查它(也可以转换它)以满足您的需要。

int getIntOnly( void ) {
    int value = 0, i = 0;
    char buf[ 64 ];

    do {
        printf( "Enter integer value: " );

        
        fgets( buf, sizeof( buf ), stdin );
        
        value = 0;
        for( i = 0; '0' <= buf[i] && buf[i] <= '9'; i++ )
            value = value * 10 + buf[i] - '0';

    } while( buf[i] != '\n' ); // good! reached end of line

    return value;
}

关于C getchar 循环获取用户的整数输入 - [如何改进],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73179787/

相关文章:

c - 如何找到数组的大小(从指向数组第一个元素的指针)?

c - 将结构用作 c "namespace"的缺点

loops - sas 从变量循环一个月

CSS 让输入消耗可用宽度

c - 字数统计应用程序 - C

javascript - 如何在这个重复函数中使用数组而不是变量?

c# - C#中的并行迭代?

javascript - 如果检查输入,则将类应用于 <body>,而不使用 jQuery

java - 为什么代码不读取 nextLine()?

c - 如何限制分配内存的大小?