用户输入无效字符时,C程序不会结束

时间:2019-02-06 22:12:19

标签: c if-statement scanf

我正在尝试编写一个不使用'pow'函数而计算X ^ Y(X到Y的幂)的C程序。当我输入数字时,该程序运行良好,但是当用户输入非数字字符时,代码无法停止时出现了问题。给出消息“您输入的字符不是数字。请重试。您输入的字符不是数字。请重试。值为1。”,它将再次运行程序。有人可以帮忙吗?我要疯了,想找出答案。

#include <stdio.h>
#include <stdlib.h>

int main()
{
int x, y, i,n=1,val; 

printf("Please enter a number: \n"); 
scanf("%d", &x);

if (x!=1)
    printf("The character you have entered is not a number.Please try again.");

else
    printf("What power is the number raised to?\n");
    scanf("%d", &y);

    if (y!=1)
    printf("The character you have entered is not a number.Please try again.");

    else
        for(i=1;i<=y;i++)
        {
        val=x;
        n=n*val;
        }
    printf("The value is %d.\n", n);
return 0;
}

3 个答案:

答案 0 :(得分:1)

当您的程序检测到无效输入时,它会打印一条消息,但否则就继续继续,就好像读取了有效输入一样。相反,它需要执行以下操作之一:

  • 在检测到无效输入时中止,或者
  • 使用并忽略无效输入,并且
    • 返回以提供输入新输入的机会,或者
    • 使用默认值。

其消息表明该程序将提供输入新输入的内容,但实际上并没有遵循。而且,如果是第一个提示的输入无效,那么当程序打印第二个提示时,该输入仍在等待读取,而第二个提示仍然是 still 无效,程序会继续运行再次打印最终n的初始值1,而无需计算任何内容。

答案 1 :(得分:0)

您需要检查scanf成功读取了多少项:

int numItemsRead = 0;

printf("What power is the number raised to?\n");
numItemsRead = scanf("%d", &y);

if (numItemsRead!=1)
   printf("The character you have entered is not a number.Please try again.");
} else {
   '''
}

答案 2 :(得分:0)

int main()
{
int x, y, i,n=1,val; 

printf("Please enter a number: \n"); 
scanf("%d", &x);

if (x!=1)
printf("The character you have entered is not a number.Please try again.");
return 0;

else
printf("What power is the number raised to?\n");
scanf("%d", &y);

即使您输入了无效的字符程序,即使您这样做,也可能会结束。