这里面判断字母那一块哪里出错了。输入数字,请输入第1个数出现两次,字母就乱掉了。
#include <stdio.h>int main()
{
int number = {0};
int cur = 0;
float max = number;
int index = 0;
printf("请输入十个在0-9999之间的数\n");
while(index < 10)
{LOOP:
printf("请输入第%d个数:", index+1);
scanf("%d",&number);
if((number<='z'&&number>='a')||(number<='Z'&&number>='A')){
printf:"请不要输入字母\n";
goto LOOP;}
else{
index++;}
}
while(cur < 10)
{
if (max < number)
{
max = number;
index = cur;
}
cur++;
}
printf("最大值是数组中第%d个数,值为%0.6f\n", index + 1, max);
getch();
return 0;
} 程序已经帮你修改了
#include <stdio.h>
#include <conio.h> // 缺少头函数
int main()
{
int number = {0};
int cur = 0;
float max = (float)number; // int 型强制转换为 float 型
int index = 0;
printf("请输入十个在0-9999之间的数\n");
while(index < 10)
{
LOOP:
printf("请输入第%d个数:", index+1);
scanf("%d",&number);
getchar(); // 吸收回车键
// 要判断首先得排除回车键,虽然上面加一条吸收回车的语句,下面的判断中仍要进一步排除
if(number != '\n' && ((number<='z'&& number>='a')||(number<='Z'&&number>='A')))
{
printf("请不要输入字母\n"); // printf() 要带括号
goto LOOP;
}
else
{
index++;
}
}
while(cur < 10)
{
if (max < number)
{
max = (float)number; // int 型强制转换为 float 型
index = cur;
}
cur++;
}
printf("最大值是数组中第%d个数,值为%0.6f\n", index + 1, max);
getch(); // getch()函数需要添加头函数 conio.h
return 0;
}
学习了 本帖最后由 xieglt 于 2020-10-28 10:40 编辑
scanf 会自动过滤掉非数字输入,但是它不清空键盘缓冲。
因此
if((number<='z'&&number>='a')||(number<='Z'&&number>='A'))
这样的代码是无用功
如果你要阻止用户非法输入,只有自己编写一个接受数字输入的函数。
代码如下:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
//自己写一个输入数字的函数
int ScanfNumber(int * num)
{
int ret = 1;
int i = 0;
char ch = 0;
//接受输入的缓冲区
char buffer = {0};
//循环输入
while(1)
{
//接收键盘输入
if(kbhit())
{
ch = getch();
}
else
{
continue;
}
//回车认为输入结束
if(ch == '\r')
{
break;
}
//将键盘输入显示
printf("%c",ch);
//只接收数字,不接受 '-' 和 '.',如果需要可以自己改。
if(ch >= '0' && ch <= '9')
{
buffer = ch;
//超出缓冲区则结束输入。
if(i >= 30)
{
break;
}
}
//输入其它字符则提示输入错误并返回
else
{
printf("请输入数字!\n");
ret = 0;
break;
}
}
//输出换行
printf("\n");
//如果输入正确,则转化为数字
if(ret == 1)
{
*num = atoi(buffer);
}
return ret;
}
int main()
{
int number = {0};
int cur = 0;
float max = number;
int index = 0;
printf("请输入十个在0-9999之间的数\n");
while(index < 10)
{
printf("请输入第%d个数:", index+1);
if(ScanfNumber(&number) == 1)
{
//判断输入的数字是否在0-9999之间
if(number >=0 && number <= 9999)
{
index++;
}
else
{
printf("请输入0-9999之间的数字\n");
}
}
}
while(cur < 10)
{
if (max < number)
{
max = number;
index = cur;
}
cur++;
}
printf("最大值是数组中第%d个数,值为%0.6f\n", index + 1, max);
getch();
return 0;
} xieglt 发表于 2020-10-28 10:30
scanf 会自动过滤掉非数字输入,但是它不清空键盘缓冲。
因此
我去跑了一下,字母鉴别是没问题了,但是数字永远是提示输入第一个数字 本帖最后由 ACatSama 于 2020-10-28 23:35 编辑
风过无痕1989 发表于 2020-10-28 00:56
程序已经帮你修改了
跑之后,鉴别字母还是不行耶 ACatSama 发表于 2020-10-28 23:28
我去跑了一下,字母鉴别是没问题了,但是数字永远是提示输入第一个数字
我测试没有问题啊,发图看看。 ACatSama 发表于 2020-10-28 23:28
我去跑了一下,字母鉴别是没问题了,但是数字永远是提示输入第一个数字
我的测试结果,
本帖最后由 吃点饭饭 于 2020-10-29 09:00 编辑
学习了 晚上再回答你,家里电脑新购固态硬盘,正在安装 win10、VS2019 本帖最后由 ACatSama 于 2020-10-29 17:22 编辑
风过无痕1989 发表于 2020-10-29 11:49
晚上再回答你,家里电脑新购固态硬盘,正在安装 win10、VS2019
https://imgchr.com/i/BJAPgS xieglt 发表于 2020-10-29 06:54
我测试没有问题啊,发图看看。
https://imgchr.com/i/BJAIbj
页:
[1]