收到一个任务,要求在一行内输入多组数据(且不知道具体几组,也不知道一组有多少数字)。输入完毕后程序对用空格分隔的多组数据扫描检测,直到遇到负数停止检测。随后程序将监测到的所有数字进行整理,并从中选出最大数输出。
![图片[1]-【C/C++】使用一个 scanf 输入多组数据并求出最大数-梦闯の天下](https://montrong-1300089193.cos.ap-beijing.myqcloud.com/montrong/2024/05/20240507094643868.png?imageMogr2/format/webp/interlace/1/quality/100)
力大砖飞,对输入的内容进行遍历检索,遇到数字开始记录,直到遇到非数字停止。随后将其与已知最大值进行比较,若更大则覆写存储当前最大值,若比当前已知最大值小则略过。同时在开始遍历前加上检测机制,防止用户输入一些乱七八糟的数据影响程序正常运行。
![20240507174949414-详细教学@1x](https://montrong-1300089193.cos.ap-beijing.myqcloud.com/montrong/2024/05/20240507094949840.png?imageMogr2/format/webp/interlace/1/quality/100)
定义并初始化一个 char
数组,同时定义一个可存储两个数的数组(用于存放当前扫描值和已知最大值)。使用 scanf
要求用户输入内容存储到 char
中。
#include "stdio.h"
int main() {
char arr[1000000];
long long int Num[2] = {0};
scanf("%[^\n]", arr); //请君输入
定义并初始化两个 long long int
类型变量,以实现限制大循环遍历次数以及记录当前遍历的数组位置。
long long int i = 0, j = 0;
开始进行循环遍历检测,外侧的大循环提供检测遍历多组整数的功能,内侧的 while
循环用于将检测到的数字逐个从 char 类型转换、记录到 long long int
类型中。while
循环下的 if
将现有最大值 Num[0]
与当前遍历记录的恶数 Num[1]
进行比较,若更大则覆写,反之则不执行。随后若检测到当前数组位置是空格符,则跳过当前数组位置。
for (i = 0; i < 100000; i++) { //游于数组。
Num[1] = 0;
if (arr[j] == '\0') { // 若字串终,遂止循矣。
break;
}
if (arr[j] == '-' || arr[j] == '0') { //魑魅魍魉,闻风而至者止。
break;
} else if (arr[j] <= '0' || arr[j] > '9') {
while (arr[j] <= '0' || arr[j] > '9') { //偏僻善柔佞损者,具过矣。
j++;
}
}
// 主循环始
while (arr[j] >= '0' && arr[j] <= '9') { //以数为址时
Num[1] = (long long int)(Num[1] * 10 + (arr[j] - '0')); //转数以浮
j++;
}
if (Num[1] > Num[0]) { //与前相较
Num[0] = Num[1]; //大则取之,小则弃之。
}
if (arr[j] == ' ' || arr[j] == '-') { // 非数哉,过矣
j++;
}
if (arr[j] == '-') { // 若以负为始,止而走也
break;
}
}
在 while
上面添加检测机制:若检测到数组已经到达最后一位,但仍未出现负号,则立即停止循环,保护程序。随后,利用 if
检测用户是否有在空格后面输入 0
或负号,若存在则立即停止;再 else if
检测用户输入的是否是数字,若不是数字则循环 j++
甩掉非数字部分,直到遇到下一个符合要求的数字,进入 while
循环。
最后输出结果,结束程序。
printf("%lld", Num[0]);
return 0;
}
完整代码如下:
#include "stdio.h"
int main() {
char arr[1000000];
long long int Num[2] = {0};
scanf("%[^\n]", arr); //请君输入
long long int i = 0, j = 0;
for (i = 0; i < 100000; i++) { //游于数组。
Num[1] = 0;
if (arr[j] == '\0') { // 若字串终,遂止循矣。
break;
}
if (arr[j] == '-' || arr[j] == '0') { //魑魅魍魉,闻风而至者止。
break;
} else if (arr[j] <= '0' || arr[j] > '9') {
while (arr[j] <= '0' || arr[j] > '9') { //偏僻善柔佞损者,具过矣。
j++;
}
}
// 主循环始
while (arr[j] >= '0' && arr[j] <= '9') { //以数为址时
Num[1] = (long long int)(Num[1] * 10 + (arr[j] - '0')); //转数以浮
j++;
}
if (Num[1] > Num[0]) { //与前相较
Num[0] = Num[1]; //大则取之,小则弃之。
}
if (arr[j] == ' ' || arr[j] == '-') { // 非数哉,过矣
j++;
}
if (arr[j] == '-') { // 若以负为始,止而走也
break;
}
}
printf("%lld", Num[0]);
return 0;
}
若本站存在用户上传的侵权内容,请联系 Email,我们会处理相关内容和用户。
请登录后查看评论内容