在线编译器 C

#include <stdio.h> int main() { int num; int temp; int digit; int max_digit = -1; int min_digit = 10; int diff; int input_status; int c; printf("Please enter an integer: "); input_status = scanf("%d", &num); if (input_status != 1) { // 清空输入缓冲区残留 while ((c = getchar()) != '\n' && c != EOF); printf("Error: Invalid input! Please enter a valid integer (e.g., 123, -456, 0).\n"); return 1; } // 手动判断空白字符(替代isspace():空格' '、制表符'\t'等) while ((c = getchar()) != '\n' && c != EOF) { // 非空白字符则视为无效输入 if (c != ' ' && c != '\t' && c != '\v' && c != '\f' && c != '\r') { printf("Error: Invalid input! Only pure integer is allowed (no extra characters).\n"); return 1; } } if (num == 0) { max_digit = 0; min_digit = 0; } else { temp = (num < 0) ? -num : num; while (temp > 0) { digit = temp % 10; if (digit > max_digit) { max_digit = digit; } if (digit < min_digit) { min_digit = digit; } temp = temp / 10; } } diff = max_digit - min_digit; printf("The difference between the maximum and minimum digits: %d\n", diff); printf("Maximum digit: %d, Minimum digit: %d\n", max_digit, min_digit); return 0; }
1) 这段代码的功能是:读取一个整数,计算并输出该整数各位数字中的最大值与最小值之间的差值。程序会进行输入验证,确保输入是纯整数(允许前导负号和数字,但后面不能跟非空白字符)。

2) 提示:
   - 注意程序处理负数的方式:它先取绝对值再逐位分析,因此负号不影响数字位的提取。
   - 输入验证部分不仅检查`scanf`是否成功,还检查输入行中是否包含除空白字符外的额外字符(如字母、标点),确保输入是“纯整数”。