有更优雅的方法来完成这项任务吗?
程序要求用户输入整数,如果输入非数字字符则重复。 要退出循环需要满足两个条件: 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/