gpt4 book ai didi

c - 当条件相同时,while 循环的行为不同?

转载 作者:行者123 更新时间:2023-11-30 16:28:16 25 4
gpt4 key购买 nike

我已经做了很多编程和arduino,并且想学习C语言,因为这也是我当前学习的要求。目前,我正在尝试编写一个程序来检查“age”变量是否包含字符。这将为用户提供一条错误消息,该消息会循环直至输入为数字。这就是我现在所拥有的:

#include <stdio.h>
#include <ctype.h>

#define MAXIMUM 10
#define BASE 10


char name[MAXIMUM]; // Input[Range to prevent overflow]
int age = 0; // Input
int nage; // nage = age + 1;
int error1 = 0;

void errorProgram()
{
if (isdigit(age))
{
error1 = 0;
printf("Error = 0\n");
}
else {
error1 = 1;
printf("Error = 1\n");
}
}

void main(void)
{
system("cls");
printf("What is your name: ");
scanf("%15[^\n]", name);
system("cls");
printf("What is your age: ");
scanf("%d", &age);
errorProgram();
while (error1 != 0) {
printf("Age contains character, please enter again: ");
scanf("%d", &age);
}
nage = age + 1;
system("cls");
printf("Hello %s, you'll be %d next year.", name, nage);
return(0);
}

这就是当我运行程序时我们忽略“你叫什么名字”部分时发生的情况

场景 1(数字)

输出

What is your age:

输入

5

输出

Error = 1
Age contains character, please enter again:

在我按回车键后,它使用 while 循环再次询问它,直到我得到正确的结果,这是我希望的行为。不过,好像是检测角色年龄?

场景2(角色)

输出

What is your age:

输入

d

输出

    Age contains character, please enter again: d
Age contains character, please enter again: Age contains character, please enter again: Age contains character, please enter again: Age contains character, please enter again: Age contains character, please enter again: Age contains character, please enter again: Age contains character, please enter again: Age contains character, please enter again: Age contains character,

我想知道为什么如果我输入一个字符,它会向控制台发送垃圾邮件。 5 和 d 都会抛出 error1 = 1,但 while 函数的行为似乎与处理字符时不同的方式不同。

有人可以解释一下这种行为吗?

顺便说一句,我正在使用我研究中的模板,该模板使用“Void main”。因此有点不同。

最佳答案

以下建议代码:

  1. 干净地编译
  2. 正确检查错误
  3. 警告:不清空 stdin 并重试获取 age
  4. 消除不需要的#defines以及变量和无用代码
  5. 正确使用scanf()输入name字符串
  6. 立即输出最终的printf(),而不是等待程序结束(其中操作系统将从printf()输出最终数据
  7. 不使用不可移植的语句,例如:system( "cls");

现在,建议的代码:

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

#define MAXIMUM 100



char name[MAXIMUM]; // Input[Range to prevent overflow]
int age = 0; // Input


int main(void)
{
//system("cls");
printf("\nWhat is your name: ");
if( scanf("%99[^\n]", name) != 1 )
{
fprintf( stderr, "scanf for name failed\n" );
exit( EXIT_FAILURE );
}

//system("cls");
printf("\nWhat is your age: ");
if( scanf("%d", &age) != 1 )
{
fprintf( stderr, "scanf for age failed\n" );
exit( EXIT_FAILURE );
}

//system("cls");
printf("\nHello %s, you'll be %d next year.\n", name, age+1);
return(0);
}

关于c - 当条件相同时,while 循环的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52430047/

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