【问题标题】:C Program Won't End When User Enters Invalid Character [duplicate]当用户输入无效字符时,C程序不会结束[重复]
【发布时间】:2019-06-30 23:33:05
【问题描述】:

我正在尝试编写一个不使用“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;
}

【问题讨论】:

    标签: c if-statement scanf


    【解决方案1】:

    当您的程序检测到无效输入时,它会打印一条消息,否则只会继续前进,就好像已读取有效输入一样。相反,它需要做以下事情之一:

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

    它的消息表明程序将提供输入新输入,但实际上它并没有遵循。此外,如果是第一个提示的输入无效,那么当程序打印第二个提示时,该输入仍在等待读取,仍然无效,程序愉快地继续第二次,最终打印n的初始值,1,没有计算任何东西。

    【讨论】:

    • 这一切都说得通。我目前正在尝试使用 do-while 循环,但我也不断遇到错误。我认为我的问题在于我的 if else 语句,当我的语句说“(x!= 1)”或“(x == 1)”并且与“y”相同时。
    • 好吧,@Rozay,做得对,检查x 和/或y 的值可以告诉您很多情况下您成功扫描号码-那些扫描的数字与这些变量的先前值不同的那些——但它不能可靠地告诉你失败。为此,您应该检查函数的返回值。 IE。 rval = scanf("%d", &amp;x); if (rval != 1) ....
    • 这是有道理的,但似乎比我预期的要困难。这项任务需要一个简单的程序,我希望在这个程序中添加一些额外的东西。暂时我会使用这个简单的程序,直到我进一步学习编码。
    【解决方案2】:

    你需要检查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 {
       '''
    }
    

    【讨论】:

    • 所以在程序开始时将“x”和“y”(又名 numItemsRead)的值都设置为零?
    • 没有。 x 是您想要提高到 y 次方的数字。两者都与 numItemsRead 不同。scanf() 方法返回一个 int,即成功读取的项目数。在我读取 y 的示例中,如果 numItemsRead 等于 1,则 y 已成功输入。如果 numItemsRead 为零,则表示没有成功读取任何数字,(y 输入的值不是合法数字)。
    【解决方案3】:
    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);
    

    如果你这样做,即使你输入了一个无效的字符程序也会结束。

    【讨论】:

    • 如果输入字母则程序结束,但即使输入数字也结束程序。
    • 嘿兄弟,如果您输入除 1 以外的数字,请仔细查看您的代码,即使它是一个数字,程序也会出错:)
    • 谢谢!!这就是我认为的问题......但我不知道该放什么信息而不是说“如果 x 不是数字那么......”或“如果 y 不是数字那么...... ”。我在这里是一个真正的新手,所以如果这很简单,我很抱歉,而且我让它变得比需要的困难得多。
    • np 兄弟。如果你是初学者,你可以这样想“用户将只输入数字”。你认为影响深远的是一个很好的想法,但现在不要这样想:))
    猜你喜欢
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2020-11-19
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多