Mọi người cho em hỏi chương trình chạy thế này là bị lỗi ạ

This post was flagged by the community and is temporarily hidden.

int array[n]; là bao nhiêu vậy bạn. :slight_smile:

3 Likes

mình muốn để giá trị của n bằng cách nhập n ấy

Vậy thì khai báo mảng phải nằm dưới phần nhập n chứ. :slight_smile:

Và còn nữa, không nên được khai báo như này:

int array[n];

array[] sẽ được khai báo ngay khi biên dịch chứ không phải sau khi nhập n. :slight_smile:

Nên nó sẽ lấy giá trị rác để khai báo, và giá trị này bằng bao nhiêu thì trời mới biết. :slight_smile:

Vậy nên sửa như thế nào. :question:

Dùng cấp phát động:

int n = 0;
scanf("%d", &n);
int *array = (int*)malloc(sizeof(int) * n);

Và nhớ free(array) khi không dùng đến nữa + khai báo thư viện stdlib.h. :slight_smile:

Mình chưa học cấp phát động và không biết nó là gì. :fearful:

Vậy bạn nên tìm hiểu về nó. Hoặc dùng cách khác như :point_down: . :slight_smile:

Code
#define MaxSize 20

int main() {
  int n = 0;
  int array[MaxSize];
  // do something
  return 0;
}
4 Likes

Vấn đề nằm ở chỗ phải lấy n trước khi cấp phát :smiley: còn [n] thì C vẫn làm được nhưng bị giới hạn độ lớn của n do nằm ngay trên stack.

4 Likes

Đã kiểm tra. :slight_smile:
Không thể tin được là dùng như này vẫn ok. :smile:

    int n = 0;
    scanf("%d", &n);
    int a[n];
    int len = sizeof(a) / sizeof(a[0]);
    printf("len: %d\n", len);
3 Likes

C only thôi, C++ ko có vụ này :V

bởi vậy gộp box C và C++ lại làm 1 trên discord là sai lầm :V

4 Likes

Em test C++ vẫn được nè. :thinking:


:sweat_smile:

1 Like

C++ được là do trình biên dịch bố láo :V :V :V lệch chuẩn :V giống như cái fflsh stdin ấy :V

4 Likes

Thử hết các chuẩn r mà không thấy cái nào warn or error. :slight_smile:

2 Likes
Error(s):

source_file.cpp(6): error C2131: expression did not evaluate to a constant
source_file.cpp(6): note: failure was caused by non-constant arguments or reference to a non-constant symbol
source_file.cpp(6): note: see usage of 'n'
source_file.cpp(7): warning C4552: '>>': operator has no effect; expected operator with side-effect
source_file.cpp(8): warning C4552: '<<': operator has no effect; expected operator with side-effect
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x64

https://rextester.com/APXH98465

thật ko thể tin được MSVC là tấm gương vĩ đại của C++ chuẩn

g++ phải thêm flag -Werror=vla

source_file.cpp: In function ‘int main()’:
source_file.cpp:6:12: error: variable length array ‘a’ is used [-Werror=vla]
     int a[n];
            ^
cc1plus: some warnings being treated as errors

https://rextester.com/VDLD74168
GCC cho phép xài VLA trong C++ chắc là cho ngắn gọn, quả thật rác rưởi :rage:

3 Likes

^ /sarcasm

Tới VS2015 mới cài hết C++03 :smiley: https://docs.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance?view=vs-2019 à còn N1653.

3 Likes

từ VS2015 trở đi là chuẩn lắm, trước đó thì thật ko thể tin được, chuẩn là bố bố là chuẩn…

3 Likes

Xin lỗi thớt vì off sang C++. :slight_smile:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?