我还在学习编程,很抱歉,如果有一个简单的问题。我在这里有一个程序来确定一个数字是否可以被23整除。但是,如果有人输入一个字符(这可能发生在意外),例如“你”,它错误地表明它确实可被23整除。我怎么能修改此程序,以便将其显示为错误?
#include <stdio.h>
int main(void)
{
double enterednumber;
printf("This is a test to see if a number is divisible by 23.\nPlease enter a number ");
scanf("%lg", &enterednumber);
switch ((int) enterednumber%23)
{
case 0:
printf("Yes, %g is divisible by 23\n", enterednumber);
break;
default:
printf("No, %g is not divisible by 23\n", enterednumber);
break;
}
return 0;
}
答案 0 :(得分:4)
始终检查输入函数中的错误,并且当输入函数表明它没有给你一个值时,不要使用'value'。
if (scanf("%lg", &enterednumber) != 1)
...an error occurred, or EOF: do not use value in enterednumber...
当您进行整数运算时,使用double
时代码很奇怪。您应该始终使用int
类型,避免使用%d
转换并使用#include <stdio.h>
int main(void)
{
int enterednumber;
int rc;
printf("This is a test to see if a number is divisible by 23.\nPlease enter a number ");
if ((rc = scanf("%d", &enterednumber)) != 1)
{
if (rc == EOF)
printf("EOF detected\n");
else
printf("Non-number detected\n");
return 1;
}
switch (enterednumber % 23)
{
case 0:
printf("Yes, %d is divisible by 23\n", enterednumber);
break;
default:
printf("No, %d is not divisible by 23\n", enterednumber);
break;
}
return 0;
}
作为输入和输出格式。
那么我怎么能这样做,如果有人输入一个非数字,它显示“发生错误,检查号码”?
if ((rc = scanf("%d", &enterednumber)) != 1)
{
if (rc == EOF)
{
printf("EOF detected\n");
return 1;
}
else
{
int c;
printf("Non-number detected\n");
while ((c = getchar()) != EOF && c != '\n' && !isdigit(c))
;
continue; // I hypothesized a loop around this!
}
}
如果您决定围绕代码循环(以便用户可以输入多个数字),那么您需要在检测到无效输入后清除错误。这可能是最简单的完成:
sscanf()
您可以决定是否在阅读时打印非数字字符。另一种方法是读取整行(使用fgets()
或POSIX
getline()
),然后在该行上使用{{1}}。这样可以更轻松地报告错误文本的内容。
答案 1 :(得分:0)
我认为问题在于您的角色是根据其ascii值在您的交换机中使用的。检查此链接:http://jackstromberg.com/2013/02/how-to-validate-numeric-integer-input-in-c/,看看在执行切换之前是否可以强制输入数字。
答案 2 :(得分:0)
当遇到无法转换的内容时,您期望scanf()
做什么?
查看scanf()
的参考页面为您提供了所需的答案。
答案 3 :(得分:0)
只需从%g
更改为%d
,使用int
代替double
即可按预期运作:
int main(void)
{
int enterednumber;
printf("This is a test to see if a number is divisible by 23.\nPlease enter a number ");
scanf("%d", &enterednumber);
switch (enterednumber%23)
{
case 0:
printf("Yes, %d is divisible by 23\n", enterednumber);
break;
default:
printf("No, %d is not divisible by 23\n", enterednumber);
break;
}
return 0;
}