我有以下編程:
#include <stdio.h>
int main()
{
int check = 0;
int size_of_arr;
int int_arr[size_of_arr];//Line 1
fscanf(stdin, "%d", &size_of_arr);// Line 2
for (int dummy = 0; dummy < size_of_arr; dummy )
{
fscanf(stdin, "%d", &int_arr[dummy]);
}
printf("Input Success\n");
return 0;
}
程式在不接受輸入的情況下存在,但如果第1行和第2行互換,則程式成功接受輸入。
我無法理解為什么會這樣?
uj5u.com熱心網友回復:
您尚未初始化size_of_arr,因此會導致未定義的行為
如果您將第 1 行放在第 2 行之前,那么您將創建一個大小為 的陣列size_of_arr,但由于size_of_arr 未初始化,它將導致一些未定義的行為。
int int_arr[size_of_arr];//Line 1
但是,如果將第 2 行放在第 1 行之前,那么您將為其分配一個值 size_of_arr
fscanf(stdin, "%d", &size_of_arr);// Line 2
只有現在你創建了陣列,所以沒有未定義的行為。
uj5u.com熱心網友回復:
你的代碼在這兩種情況下都適合我
case1:-
#include <stdio.h>
int main()
{
int check = 0;
int size_of_arr;
int int_arr[size_of_arr];//Line 1
fscanf(stdin, "%d", &size_of_arr);// Line 2
for (int dummy = 0; dummy < size_of_arr; dummy )
{
fscanf(stdin, "%d", &int_arr[dummy]);
}
printf("Input Success\n");
return 0;
}
輸出:-
5 \\size_of_arr
4
3
2
1
2
Input Success
case2:-
#include<stdio.h>
int main()
{
int check = 0;
int size_of_arr;
fscanf(stdin, "%d", &size_of_arr);// Line 2
int int_arr[size_of_arr];//Line 1
for (int dummy = 0; dummy < size_of_arr; dummy )
{
fscanf(stdin, "%d", &int_arr[dummy]);
}
printf("Input Success\n");
return 0;
}
output:-
6 \\size_of_arr
5
4
6
7
6
5
Input Success
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/335635.html
