lovetec 发表于 2022-10-23 00:40:27

【求助帖】见鬼了!!!

很简单的一段代码,百思不得其解,求各位大神指点:

#include <cstdio>
#include<iostream>
using namespace std;

#include <cstdio>
#include<iostream>
using namespace std;

int main() {
        int i,c,n,m=0;
       
        while (1) {
                scanf("%d", &c[++i]);
                if(c==0){
                        break;
                }
               
                if(m<c){
                        m = c;
                }
//             printf("000:%d vs %d\n",c,m);
//                printf("111:%d vs %d vs %lu\n",c,m,&m);
        }
        n = i;

    printf("%d vs %d\n",n,m);
}

如果输入是:
1
2
3
4
输出不应该是5,4吗,怎么m输出是0?
如果打开上面000处的打印,结果仍是5,0
而打开111处打印,结果就变5,4了

人造人 发表于 2022-10-23 00:55:47

scanf("%d", &c[++i]);
执行这条语句之前,i 的值是多少?

傻眼貓咪 发表于 2022-10-23 18:11:07

温馨建议:
代码本身没有需要用 using namespace std
用 C++ #include <iostream> 就不用 <cstdio>,虽然没有错,但就好象你穿一件黑色的裤,再穿一件白色的裤一样(要不然就只穿黑色,或只穿白色就行了,不用两件都穿啊)
如上,用 C++ 就试试用 C++ 的输出输入流吧,比如:std::cin 或 std::cout
while(1) 可以写成 while (true),因为 C++ 增加了 bool 数据类型
不定长数组可以试用 C++ 的向量 vector 储存,C++ 优势泛型是非常好用的

lovetec 发表于 2022-12-3 22:39:43

人造人 发表于 2022-10-23 00:55
scanf("%d", &c[++i]);
执行这条语句之前,i 的值是多少?

这个地方是有问题,不过在定义时对i赋值0后结果还是一样

lovetec 发表于 2022-12-3 22:41:04

傻眼貓咪 发表于 2022-10-23 18:11
温馨建议:
代码本身没有需要用 using namespace std
用 C++ #include就不用 ,虽然没有错,但就好象你 ...

感谢指正,但是百思不得其解的是输出的值不对

傻眼貓咪 发表于 2022-12-4 07:46:14

lovetec 发表于 2022-12-3 22:41
感谢指正,但是百思不得其解的是输出的值不对

scanf("%d", &c[++i]); // <--------------- 你的这里 i 已经增加 1 了,再也不是之前的 i
if (c == 0) { // <--------------- 这里 i 当然就是新的 i 啊!C 语言自增功能让我们代码简约方便,但也要注意啊!
}
页: [1]
查看完整版本: 【求助帖】见鬼了!!!