一个简单(奇怪)的 C 语言问题

WilliamColton · 2024-3-22 12:33:46 · 297 次点击
使用的 IDE 是 CLion ,编译器是其自带的 `MinGW 11.0 w64`

下面的代码使用 chatgpt 加了注释,主要的问题是:

在直接给定输入
```
8

1 9 2 6 0 8 1 7
```
时,结果为 0.

而再次给定输入
```
8

1 9 2 6 90 8 1 7
```
时,结果还是 0.

而手动一个一个输入则正常显示 1.

虽然描述的很离奇,但是确实是这样,即:第一次的结果会影响第二次的结果,使之变成第一次的结果

我问了我们教 C 语言的老师,连他也不知道怎么回事,说可能是 CLion 的问题,但是这个答案并不能令我信服,

故来寻求各位 V 友帮助

求各位 V 友解答 QAQ

代码如下:
```
#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n); // 从标准输入中读取一个整数,存储到变量 n 中

    int min;
    scanf("%d", &min); // 假设输入的第一个数为最小值,存储到变量 min 中
    int num;
    for (int i = 1; i < n; i++) { // 循环读取剩余的 n-1 个整数
        scanf("%d", &num); // 从标准输入中读取一个整数,存储到变量 num 中
        printf("%d\n", num); // 将读取的整数打印到标准输出,以换行符结束

        if (num < min) { // 检查当前读取的整数是否比最小值小
            min = num; // 更新最小值为当前读取的整数
        }
    }
    printf("%d", min); // 打印最小值到标准输出

    return 0; // 返回 0 表示程序正常结束
}

```
举报· 297 次点击
登录 注册 站外分享
18 条回复  
cnbatch 初学 2024-3-22 22:07:04
第九行那个 scanf ,双引号内有个空格,但你原贴给出的代码,这一行的双引号内没空格
nevermoreluo 小成 2024-3-22 17:44:22
同 Clion2023.3.4 ,mingw11 没复现
建议自己断点 debug 找找吧,这里总共也没多少数
lff0305 小成 2024-3-22 16:30:36
在 Linux 下用 GCC 测试了下没有发现问题

这个问题是否和 Clion 的 Console 有关系?
araraloren 小成 2024-3-22 15:31:04
@yolee599 `scanf` can handle the input correctly, you don't need enter line by line.
MoYi123 小成 2024-3-22 14:31:49
如果要在 clion 的 terminal 里输入, 推荐把 Emulate terminal in the output console 打开
CEBBCAT 初学 2024-3-22 14:25:04
尝试使用输入重定向来解决,我怀疑你复制粘贴的字符掺杂了不可见字符之类的。

例如,echo '8\n\n1 2 3\n' > t; cat t | od -xa; cat t | ./a.exe

已经会用调试器了啊,很好,这些奇奇怪怪的问题可以追查,相信最后要不发现哭笑不得的错误,要不然就是对计算机有更多了解。或者也可以切换到其他平台比如 Linux macOS 。

另外,论坛里面有很多半吊子的,网上也是,有的时候别太信。小马过河,尽量规避因为别人的鼠目寸光给自己带来的误导
tool2d 小成 2024-3-22 14:20:58
用 mingw gcc 编译了一下,没办法复现,结果倒是对的。
4
1 2 3 4
2
3
4
1
sbldehanhan 小成 2024-3-22 14:07:13
程序两次运行之间没有任何联系。所以,第一次影响第二次是不可能发生的。遇到问题先从自己身上找原因,相信计算机比人靠谱。
yolee599 初学 2024-3-22 13:50:12
@smdbh #8 正解,按照 OP 给出的代码,应该这样输入:
8\n
1\n
9\n
2\n
6\n
0\n
8\n
1\n
7\n

而不是这样:
8\n
1 9 2 6 0 8 1 7\n
aa514758835 小成 2024-3-22 13:30:47
把中间文件删干净重新编译把,我有时候也会遇到明明是 false 但是走了 true 分支的情况
12下一页
返回顶部