c語言入門的語法↓
請使用者使入5個數值,再倒印回來。
倒印前會多印一個1041,請問是哪裡來的???
自己腦袋轉3遍還是想不透。
註:在線上compile的 https://www.onlinegdb.com/
int i=0, n=0, *p=NULL;
p=(int *)malloc(sizeof(int));
for (i=1; i<=5; i++) {
p=(int *)realloc(p, i*sizeof(int));
printf("number %d : ", i);
scanf("%d", &n);
*(p+(i))=n; // 此行不能與上行合併,會收到scanf()的返回值,而非變數n的值。
}
for (i-1; i>0; i--)
printf("%d\n", *(p+i)); // 倒印回來。
free(p);
我看起來正常呢?
#include <stdio.h>
#include <stdlib.h>
int main() {
int i, n, *p;
p = (int*)malloc(sizeof(int));
for (i = 1; i <= 5; i++) {
p = (int*)realloc(p, i * sizeof(int));
printf("number %d : ", i);
scanf("%d", &n);
*(p + i) = n;
}
for (i = 5; i > 0; i--)
printf("%d\n", *(p + i));
free(p);
return 0;
}
使用 g++ (Apple clang version 14.0.0 (clang-1400.0.29.202))
要改這裡
for(i = 5; i>= 1; i--)
printf("%d \n", *(p+i));
結果圖
我剛有去測試程式,是變數 i 位移的問題。
以下是完整程式:
我先 去 印出 i 目前的數字是6,
所以,我有在下圖中,把 「正序」跟「反序」都印出來。
#include<stdio.h>
#include<stdlib.h>
void main(){
int i = 0, n = 0, *p = NULL;
p = (int *) malloc(sizeof(int));
for(i = 1; i <= 5; i++){
p = (int *)realloc(p, i * sizeof(int));
printf("number %d:", i);
scanf("%d", &n);
*(p+(i)) = n;
}
printf("i = %d \n", i);
for(i=1; i <=5; i++)
printf("%d \n", *(p+i));
for(i = 5; i>= 1; i--)
printf("%d \n", *(p+i));
free(p);
}
原本的程式會多印出"1041"
作業系統 : Ubuntu 22.04
gcc