gpt4 book ai didi

C 程序 - 如何拒绝任何非数字输入

转载 作者:太空宇宙 更新时间:2023-11-04 05:49:05 26 4
gpt4 key购买 nike

我刚刚开始学习 C 语言,如果您知道更好的方法来实现以下目标,我很乐意帮助您清理/简化我的代码。

我想要一个程序来询问一个数字,如果找到了然后继续打印并结束,但是如果输入了其他任何东西(例如字母键),那么我希望程序循环询问一个数字直到给出一个。

我从使用一个简单的 scanf 输入命令开始,但是当我尝试检查是否输入了有效数字(如我们定义的那样)时,这似乎进入了无限循环。

所以我最终得到了这个,通过玩弄/在线查看,但我很想知道是否有更有效的方法!

//
// Name & Age Program
// Created by Ben Warren on 1/3/18.
//


#include <stdio.h>
int main (void)
{

//Setting up variables
int num;
char line[10]; /* this is for input */



//Collecting input
printf("Please enter any number? \t");
scanf("%d", &num);


//If Invalid input
while (num==0)
{
printf("\nTry again:\t");
fgets(line, 10, stdin); //turning input into line array
sscanf(line, "%d",&num); //scaning for number inside line and storing it as 'num'
if (num==0) printf("\nThat's not an number!");
}


//If Valid input
{
printf("\n%d is nice number, thank you! \n\n", num);
*}*


return 0;

}

最佳答案

不是检查值是否不同于 0,而是检查的返回值sscanf。它返回它进行的转换次数。在你的情况下它应该是 1。除非返回值是 1,否则继续询问一个数字。

#include <stdio.h>

int main(void)
{
int ret, num;
char line[1024];

do {
printf("Enter a number: ");
fflush(stdout);

if(fgets(line, sizeof line, stdin) == NULL)
{
fprintf(stderr, "Cannot read from stdin anymore\n");
return 1;
}

ret = sscanf(line, "%d", &num);

if(ret != 1)
fprintf(stderr, "That was not a number! Try again.\n");

} while(ret != 1);

printf("The number you entered is: %d\n", num);

return 0;
}

关于C 程序 - 如何拒绝任何非数字输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49060300/

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