为了优化上述C语言代码以提高效率,我们可以从减少不必要的输入/输出、优化循环结构、减少字符串处理开销以及避免缓冲区溢出等方面入手。
#include <stdio.h> #include <string.h> #include <stdbool.h> // 函数声明,用于读取正整数 bool readPositiveInteger(int *number); int main() { int number, sum = 0; char again = 'y'; // 主循环,读取正整数并累加 do { if (readPositiveInteger(&number)) { sum += number; } // 询问用户是否继续输入 printf("要继续输入吗?(y/n):"); scanf(" %c", &again); // 清除输入缓冲区 while (getchar() != '\n'); } while (again == 'y' || again == 'Y'); // 输出结果 printf("所有输入的正整数之和为:%d\n", sum); // 扩展示例:逆序打印字符串 char str[100]; int length, i; // 读取字符串,并直接计算长度 printf("请输入一个字符串:"); if (scanf("%99s", str) == 1) { length = strlen(str); // 逆序打印字符串 printf("逆序打印的字符串为:"); for (i = length - 1; i >= 0; i--) { putchar(str[i]); } printf("\n"); } else { printf("输入错误,请确保输入的是字符串。\n"); } return 0; } // 读取正整数函数 bool readPositiveInteger(int *number) { // 清除任何可能的输入缓冲区残留 while (getchar() != '\n'); // 读取整数并检查是否成功 if (scanf("%d", number) != 1 || *number <= 0) { // 输入错误或不是正整数 printf("输入无效,请输入一个正整数。\n"); return false; } return true; } // 说明: // 1. 我们将读取正整数的逻辑封装到了一个函数中,该函数负责清除输入缓冲区,读取整数,并检查是否成功。 // 2. 减少了不必要的`printf`调用,只在需要时输出信息。 // 3. 使用`strlen`函数直接计算字符串长度,避免了额外的循环。 // 4. 逆序打印字符串时,使用`putchar`代替`printf`,因为`putchar`更轻量级,仅用于输出单个字符。 // 5. 我们还添加了对`scanf`的返回值检查,以确保输入的是字符串,而不是其他类型的数据。 // 注意:虽然这些优化可以提高代码的效率,但在实际应用中,效率提升可能并不显著, // 因为程序的主要开销通常来自于I/O操作(如`printf`和`scanf`), // 而不是CPU密集型任务。对于大型程序,还需要考虑其他优化策略,如算法优化、数据结构选择等。
以上代码通过封装函数、减少不必要的I/O操作、优化字符串处理和使用更轻量级的函数等方法,提高了原始代码的效率。然而,对于这样的小型程序,性能提升可能并不明显,因为大部分开销来自于与用户的交互。在实际应用中,需要根据具体情况选择适当的优化策略。