虽然是假的,但是我还是很高兴

近日闻悉获公司摄影比赛优秀奖,虽然有很多“以资鼓励”的意思,但还是很高兴,特立此存照。看来人的虚荣心始终都是有的,同时让我想起以前一同事(在学校教书那会儿)的口头禅:虽然是假的,但是我还是很高兴(完)

![](https://cdn.jsdelivr.net/gh/csdn/dream-ai-plus@latest/images/logo.png) 您好,我是由优快云和外部合作伙伴合作研发的AI作业模型机器人,很高兴为您服务。 --- 您说“我的 `count` 并没有变化”,这意味着: ✅ 程序能运行 ❌ 但无论输入什么,`count` 始终为 0 或初始值 这说明 **`count += (a % 10 == b)` 这行代码没有生效**,我们来深入排查根本原因。 --- ### 🔍 问题定位:`count` 不变的四大可能原因 #### ❌ 原因 1:`a` 在进入循环前已被修改或清零 ```c long long a; int b; scanf("%lld %d", &a, &b); a = -a; // 错误!如果是正数就变成负的了 // 应该是:if (a < 0) a = -a; ``` 👉 若你写了 `a = -a;` 而不是 `if (a < 0) a = -a;`,会导致原本的正数被取反,可能溢出或逻辑错乱。 --- #### ❌ 原因 2:`a` 是 0,但用了 `while(a)` 而不是 `do-while` ```c while (a) { // 当 a=0 时根本不进入循环 count += ...; a /= 10; } ``` 👉 此时 `count` 不会增加任何值,直接跳过 → 输出 0! ✅ 正确做法必须是: ```c do { count += (a % 10 == b); a /= 10; } while (a); ``` 这样才能保证 `a=0` 时也执行一次循环体。 --- #### ❌ 原因 3:`b` 是字符形式(比如从字符串读入),而不是整数 ```c char b; scanf("%lld %c", &a, &b); b = b - '0'; // 容易出错 ``` 或者: ```c if (a % 10 == ('0' + b)) // 错误地当作字符比较 ``` 👉 导致 `a % 10 == b` 永远为 → `count` 不变! --- #### ❌ 原因 4:变量未初始化 或 被意外覆盖 ```c int count; // 没有初始化 // count 是随机值,可能导致统计错误 ``` 或: ```c a %= 10; // 意外提前改变了 a 的值 ``` --- ### ✅ 快速验证:使用以下**绝对正确的代码**重新测试 ```c #include <stdio.h> int main() { long long a; int b; scanf("%lld %d", &a, &b); // 输入如:1314 1 if (a < 0) a = -a; // 只对负数取反 int count = 0; do { int digit = a % 10; // 提取个位 if (digit == b) { count++; // 明确加一,便于调试 } a /= 10; // 去掉个位 } while (a); printf("%d\n", count); return 0; } ``` 📌 测试用例建议: | 输入 | 期望输出 | |------------|----------| | `1314 1` | `2` | | `1000 0` | `3` | | `0 0` | `1` | | `-111 1` | `3` | --- ### 🛠 如何确认 `count` 是否在变?—— 加调试输出 ```c do { printf("a=%lld, digit=%lld, b=%d -> ", a, a%10, b); // 打印当前状态 if (a % 10 == b) { count++; printf("match! count=%d\n", count); } else { printf("no match\n"); } a /= 10; } while (a); ``` 运行后你会看到每一步的变化,例如输入 `1314 1`: ``` a=1314, digit=4, b=1 -> no match a=131, digit=1, b=1 -> match! count=1 a=13, digit=3, b=1 -> no match a=1, digit=1, b=1 -> match! count=2 ``` 这样就能直观看到 `count` 是否变化。 --- ### ✅ 总结解决方案 | 问题 | 修复方式 | |------|-----------| | `count` 不变 | 改用 `do-while` 循环 | | 符号处理错误 | 使用 `if (a < 0) a = -a;` | | `b` 类型不对 | 确保用 `%d` 读取 `int b` | | 逻辑不清晰 | 用 `if (...) count++;` 替代 `+= (bool)` | | 未初始化 | 显式写 `int count = 0;` | --- > ✅ **立即行动建议**: 1. 复制上面带调试输出的版本; 2. 输入 `1314 1`; 3. 观察每一步 `a` 和 `count` 是否变化; 4. 如果仍无变化,请截图你的完整代码发给我,我帮你逐行纠错! 你已经很接近成功了,坚持住!💪
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值