cùng nhau chia sẻ kiến thức và những cách lập trình trên pc cho bạn mới vào đại học
Translate
Thứ Hai, 18 tháng 12, 2017
Thứ Ba, 21 tháng 11, 2017
Thứ Năm, 5 tháng 10, 2017
code Lich van nien
#include <stdio.h>
#include <conio.h>
const int month_table[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int leap_month_table[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//check leap year or not
#define IS_LEAP_YEAR(year) (((year%400 == 0) || (year%4 == 0 && year%100 != 0))? true : false)
bool validDate(int, int, int);
int getTotalDayinMonth(int, int);
void findPreDate(int*, int*, int*);
void findNextDate(int*, int*, int*);
int main()
{
int day, month, year;
int tempDay, tempMonth, tempYear;
int sel;
int totalDay;
printf("******Calendar*********\n");
do
{
printf("day = "); scanf("%d", &day);
printf("\nmonth = "); scanf("%d", &month);
printf("\nyear = "); scanf("%d", &year);
}while(!validDate(day, month, year));
printf("\n****chon 1 trong cac so****\n\
1.so ngay trong thang\n\
2. ngay trc do\n\
3. ngay tiep theo\n\
Other. Exit");
do
{
printf("\n\nlua chon so: ");
scanf("%d", &sel);
switch(sel)
{
case 1:
totalDay = getTotalDayinMonth(month, year);
printf("\nSo Thhang %d is: %d", month, totalDay);
break;
case 2:
tempDay = day; tempMonth = month; tempYear = year;
findPreDate(&tempDay, &tempMonth, &tempYear);
if(validDate(tempDay, tempMonth, tempYear))
{
printf("\nThe previous date is %02d/%02d/%04d", tempDay, tempMonth, tempYear);
}
else
{
printf("\nThe date is invalid");
}
break;
case 3:
tempDay = day; tempMonth = month; tempYear = year;
findNextDate(&tempDay, &tempMonth, &tempYear);
if(validDate(tempDay, tempMonth, tempYear))
{
printf("\nNgay tiep theo %02d/%02d/%04d", tempDay, tempMonth, tempYear);
}
else
{
printf("\nNgay khong hop le");
}
break;
default:
printf("\nExit");
}
}while(sel == 1 || sel == 2 || sel == 3);
getch();
return 0;
}
int getTotalDayinMonth(int month, int year)
{
return (IS_LEAP_YEAR(year) ? leap_month_table[month-1] : month_table[month-1]);
}
bool validDate(int day, int month, int year)
{
// validate dd/mm/yyyy
if (year < 1 || year > 9999 ||
month < 1 || month > 12 ||
day < 1 || day > 31)
{
return false;
}
if(day > getTotalDayinMonth(month, year))
{
return false;
}
return true;
}
void findPreDate(int *day, int* month, int* year)
{
(*day)--;
if (*day < 1)
{
(*month)--;
if (*month < 1) { (*year)--; if(*year == 0) { *month = 0; *day = 0; return; } else *month = 12; } *day = getTotalDayinMonth(*month, *year); } } void findNextDate(int *day, int* month, int* year) { (*day)++; if(*day > getTotalDayinMonth(*month, *year))
{
*day = 1;
(*month)++;
if (*month > 12)
{
*month = 1;
(*year)++;
}
}
}
#include <conio.h>
const int month_table[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int leap_month_table[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//check leap year or not
#define IS_LEAP_YEAR(year) (((year%400 == 0) || (year%4 == 0 && year%100 != 0))? true : false)
bool validDate(int, int, int);
int getTotalDayinMonth(int, int);
void findPreDate(int*, int*, int*);
void findNextDate(int*, int*, int*);
int main()
{
int day, month, year;
int tempDay, tempMonth, tempYear;
int sel;
int totalDay;
printf("******Calendar*********\n");
do
{
printf("day = "); scanf("%d", &day);
printf("\nmonth = "); scanf("%d", &month);
printf("\nyear = "); scanf("%d", &year);
}while(!validDate(day, month, year));
printf("\n****chon 1 trong cac so****\n\
1.so ngay trong thang\n\
2. ngay trc do\n\
3. ngay tiep theo\n\
Other. Exit");
do
{
printf("\n\nlua chon so: ");
scanf("%d", &sel);
switch(sel)
{
case 1:
totalDay = getTotalDayinMonth(month, year);
printf("\nSo Thhang %d is: %d", month, totalDay);
break;
case 2:
tempDay = day; tempMonth = month; tempYear = year;
findPreDate(&tempDay, &tempMonth, &tempYear);
if(validDate(tempDay, tempMonth, tempYear))
{
printf("\nThe previous date is %02d/%02d/%04d", tempDay, tempMonth, tempYear);
}
else
{
printf("\nThe date is invalid");
}
break;
case 3:
tempDay = day; tempMonth = month; tempYear = year;
findNextDate(&tempDay, &tempMonth, &tempYear);
if(validDate(tempDay, tempMonth, tempYear))
{
printf("\nNgay tiep theo %02d/%02d/%04d", tempDay, tempMonth, tempYear);
}
else
{
printf("\nNgay khong hop le");
}
break;
default:
printf("\nExit");
}
}while(sel == 1 || sel == 2 || sel == 3);
getch();
return 0;
}
int getTotalDayinMonth(int month, int year)
{
return (IS_LEAP_YEAR(year) ? leap_month_table[month-1] : month_table[month-1]);
}
bool validDate(int day, int month, int year)
{
// validate dd/mm/yyyy
if (year < 1 || year > 9999 ||
month < 1 || month > 12 ||
day < 1 || day > 31)
{
return false;
}
if(day > getTotalDayinMonth(month, year))
{
return false;
}
return true;
}
void findPreDate(int *day, int* month, int* year)
{
(*day)--;
if (*day < 1)
{
(*month)--;
if (*month < 1) { (*year)--; if(*year == 0) { *month = 0; *day = 0; return; } else *month = 12; } *day = getTotalDayinMonth(*month, *year); } } void findNextDate(int *day, int* month, int* year) { (*day)++; if(*day > getTotalDayinMonth(*month, *year))
{
*day = 1;
(*month)++;
if (*month > 12)
{
*month = 1;
(*year)++;
}
}
}
Thứ Hai, 25 tháng 9, 2017
HIỂN THỊ BẢNG MÃ ACSII
#include<stdio.h>
#include<conio.h>
int main()
{
int i;
printf (" nhap bang ma ascii");
for ( i=0;i< 255;i++)
{
printf("%d %c",i ,i);
if(i % 10==0)
printf("\n");
}
getch();
return 0;
}
#include<conio.h>
int main()
{
int i;
printf (" nhap bang ma ascii");
for ( i=0;i< 255;i++)
{
printf("%d %c",i ,i);
if(i % 10==0)
printf("\n");
}
getch();
return 0;
}
CÁC LỖI THƯỜNG GẶP TRONG C++
các lỗi thường gặp trong lập trình c++
Nguyên tắc sửa lỗi (lỗi / cảnh báo – error / warning (có thể bỏ qua mà không cần sửa, tuy nhiên một số warning nếu không được sửa sẽ làm cho chương trình (CT) chạy không đúng · Kích đôi chuột vào thông báo lỗi để nhảy đến vị trí có lỗi trong chương trình (CT).
· Đọc dòng chứa con trỏ hoặc dòng trên (dưới) để sửa lỗi.
· Nếu không tìm thấy lỗi thì phải dò lỗi từ đầu CT đến dòng chứa con trỏ (có thể là do lỗi ở phần trên của dòng chứa con trỏ chứ không phải ở dòng chứa con trỏ (hoặc dòng trên nó)).
· Các lỗi ngữ nghĩa (CT vẫn thực thi nhưng kết quả sai) trình biên dịch C++ không phát hiện được:
Một số từ English thông dung trong lap trình
Undeclared : không khai báo
unable: không thể
undefined : không xác định
Incorrectly: ko chính xác
Symbol : biểu tượng
Statement: câu lệnh, khai báo
Parameter: tham số
Argument: đối số
Declaration: kê khai
Terminated: chấm dứt
Syntax : cú pháp
Constant: hằng số
Expression: biểu thức
1. ( expected: thiếu ‘(‘
2. ) expected: thiếu ‘)’
3. , expected: thiếu ‘,’
4. : expected after private: thiếu ‘:’ sau private
5. : expected after protected: thiếu ‘:’ sau protected
6. : expected after public: thiếu ‘:’ sau public
7. < expected: thiếu dấu <
8. { expected:thiếu dấu {
9. } expected: thiếu dấu }
10. Array bounds missing ]: thiếu ‘]’ bao dãy
11. Array must have at least one element: dãy phải có ít nhất một phần tử
12. Array size too large: kích cỡ dãy quá lớn
13. Body already defined for this function: nội dung hàm này đã được viết.
14. Call of nonfunction: tên được gọi không được khai báo như một hàm, do khai báo hàm không chính xác hoặc viết sai tên hàm.
15. Cannot cast from 'type1' to 'type2': không thể ép từ kiểu ‘type1’ đến kiểu 'type2'
16. Cannot convert 'type1' to 'type2': không thể chuyển đổi 'type1' thành 'type2'
17. Cannot modify a const object: không thể thay đổi một đối tượng hằng (const)
18. Cannot overload 'main': không thể định nghĩa chồng hàm main
19. Cannot use tiny or huge memory model with Windows: không thể sử dụng mô hình bộ nhớ tiny hoặc huge với Windows
20. Cannot open such file or directory “xxx”: không thể mở file hoặc thư mục xxx
21. Cannot open “Debug\..” for writting: không thể mở file Debug\.. để ghi (hãyđóng CT đã chạy trước đây để có thể chạy lại CT)
22. Case outside of switch: ‘case’ bên ngoài switch
23. Case statement missing ‘:’: ‘case’ thiếu dấu ‘:’
24. Character constant must be one or two characters long: hằng ký tự chỉ có thể là một ký tự (‘a’) hoặc hai ký tự (‘\n’)
25. Compound statement missing }: thiếu dấu } cho khối lệnh (câu lệnh phức).
26. Constant expression required: dãy phải được khai báo với kích thước là hằng số(thường là do khai báo hằng (#define) không đúng).
27. Constant variable 'variable' must be initialized: biến có kiểu const phải được khởi tạo (vì ta không thể gán giá trị cho biến có kiểu const trong quá trình thi hành CT). Thực hành nhập môn lập trình 10
28. Could not find a match for argument(s): các đối số không phù hợp (kiểm tra lại khai báo hàm và các đối số truyền vào)
29. Could not find file 'filename': không thể tìm file 'filename'
30. Declaration does not specify a tag or an identifier: khai báo (kiểu struct hoặc kiểu union) không chứa thành phần
31. Declaration is not allowed here: không cho phép khai báo ở đây
32. Declaration missing ‘;’: khai báo thiếu dấu ‘;’
33. Declaration syntax error: khai báo sai lỗi cú pháp
34. Declaration terminated incorrectly: kết thúc khai báo không chính xác
35. Declaration was expected: khai báo được mong muốn ở đây nhưng không tìm thấy
36. Default argument value redeclared: giá trị của tham số mặc định bên trong hàm bị thay đổi
37. Default argument value redeclared for parameter 'parameter': giá trị của tham số (đối số) mặc định 'parameter' bên trong hàm bị thay đổi
38. Default expression may not use local variables: một biểu thức tham số (đối số)mặc định bên trong hàm không được phép sử dụng tham số khác
39. Default outside of switch: default bên ngoài switch
40. Default value missing: tham số theo sau một tham số mặc định phải có giá trị mặc định
41. Default value missing following parameter 'parameter': thiếu giá trị mặc định cho tham số 'parameter' (vì nó theo sau một tham số mặc định nên phải có giá trị mặc định)
42. Define directive needs an identifier: khai báo define cần có một tên
43. Delete array size missing ]: thiếu ‘]’ khi hủy một dãy
44. Division by zero: chia cho 0
45. do statement must have while: do phải có while
46. do-while statement missing do-while thiếu dấu ‘(’
47. do-while statement missing ): do-while thiếu dấu ‘)’
48. do-while statement missing ;: do-while thiếu dấu ‘;’
49. Duplicate case: mỗi case trong switch phải có giá trị đi kèm
50. Enum syntax error: khai báo kiểu enum sai cú pháp
51. Expression expected: một biểu thức được mong muốn ở đây nhưng ký hiệu hiện thời không thể bắt đầu cho một biểu thức
52. Expression of scalar type expected: mong muốn biểu thức có kiểu vô hướng. Các toán tử !, ++, và – yêu cầu một biểu thức có kiểu vô hướng (char, short, int,long, enum, float, double, long double, pointer)
53. Expression syntax: cú pháp biểu thức
54. File name too long: tên file qúa dài
55. For statement missing ‘(‘: câu lệnh for thiếu ‘(’
56. For statement missing ): câu lệnh for thiếu ‘)’
57. For statement missing ;: câu lệnh for thiếu ‘)’
58. 'function' cannot return a value: hàm không thể trả về giá trị (nó là hàm void)
59. 'function' must be declared with no parameters: hàm phải được khai báo với không tham số
60. 'function' must be declared with one parameter: hàm phải được khai báo với một tham số Thực hành nhập môn lập trình11
61. 'function' must be declared with two paraameters: hàm phải được khai báo với một tham số
62. 'function1' cannot be distinguished from 'function2': không thể phân biệt 'function1' với 'function2'
63. Function 'function' should have a prototype: hàm 'function' nên có tiêu đề.
64. Function call missing ): thiếu dấu ‘)’ khi gọi hàm.
65. Function should return a value: chưa trả về giá trị cho hàm
66. 'identifier' cannot start a parameter declaration: 'identifier' không thể bắt đầu cho khai báo một tham số
67. 'identifier' is not a member of struct: 'identifier' không phải là thành phần của struct
68. 'identifier' is not a non-static member and can't be initialized here: 'identifier' không phải là một biến tĩnh và không thể được khởi tạo ở đây
69. 'identifier' is not a parameter: 'identifier' không phải là một tham số
70. Identifier expected: mong muốn một định danh
71. If statement missing câu lệnh if thiếu ‘(‘
72. If statement missing ): câu lệnh if thiếu ‘)‘
73. Illegal character 'character' (0x'value'): hằng ký tự sai
74. Illegal structure operation: toán tử trên struct không đúng (chỉ có thể là: ‘.’, &,=)
75. Illegal use of floating point: toán tử trên số thực chấm động không đúng (chỉ có thể là: SHL, SHR, AND, OR, XOR, NOT, ? :, *, …)
76. Improper use of typedef 'identifier': kiểm tra khai báo 'identifier' ở dòng typedef
77. Incorrect number format: định dạng số không đúng
78. Incorrect use of default: sau default không có dấu ‘:’
79. Invalid use of dot: sử dụng dấu ‘.’ không đúng, ví dụ:
struct foo {
int x;
int y;
}p = {0,0};
int main (…)
{
p.x++; /* Đúng */
p. y++; /* Sai: Invalid use of dot */
return 0;
}
80. Lvalue required: thành phần bên trái của lệnh gán phải là biến
81. main must have a return type of int: hàm main phải return về kiểu int
82. Misplaced break: break không nằm trong switch hoặc một vòng lặp
83. Misplaced continue: continue không nằm trong một vòng lặp
84. Misplaced else: else không có if
85. Missing xxx before yyy: thiếu xxx trước yyy
86. Missing function header (old-style): sai tiêu đề ở phần định nghĩa hàm (có thểmthừa dấu ; sau tiêu đề)
87. Multiple declaration for 'identifier': trùng khai báo cho 'identifier'
88. Need an identifer to declare: cần một định danh cho khai báo
89. No : following the ?: không có : sau ? trong cấu trúc tam phân (… ? … : … ) Thực hành nhập môn lập trình 12
90. Not an allowed type: không cho phép kiểu này (chẳng hạn, không thể trả về dữ liệu kiểu mảng tĩnh cho hàm)
91. Numeric constant too large: hằng số quá lớn
92. new line in constant: thiếu dấu ”
93. operator [] missing ]: toán tử [] thiếu ]
94. sizeof may not be applied to a function: toán tử sizeof không thể áp dụng cho hàm
95. Size of 'identifier' is unknown or zero: kích thước của 'identifier' không biết hoặc là 0
96. Size of the type is unknown or zero: kích thước của kiểu không biết hoặc là 0
97. Statement missing ‘;’: thiếu dấu ‘;’
98. Structure size too large: kích thước của struct quá lớn
99. Switch selection expression must be of integral type: biểu thức chọn của switch phải là kiểu nguyên
100. unexpected end of file: thiếu }
101. xxx undeclared identifier: thiếu khai báo xxx
Nguyên tắc sửa lỗi (lỗi / cảnh báo – error / warning (có thể bỏ qua mà không cần sửa, tuy nhiên một số warning nếu không được sửa sẽ làm cho chương trình (CT) chạy không đúng · Kích đôi chuột vào thông báo lỗi để nhảy đến vị trí có lỗi trong chương trình (CT).
· Đọc dòng chứa con trỏ hoặc dòng trên (dưới) để sửa lỗi.
· Nếu không tìm thấy lỗi thì phải dò lỗi từ đầu CT đến dòng chứa con trỏ (có thể là do lỗi ở phần trên của dòng chứa con trỏ chứ không phải ở dòng chứa con trỏ (hoặc dòng trên nó)).
· Các lỗi ngữ nghĩa (CT vẫn thực thi nhưng kết quả sai) trình biên dịch C++ không phát hiện được:
Một số từ English thông dung trong lap trình
Undeclared : không khai báo
unable: không thể
undefined : không xác định
Incorrectly: ko chính xác
Symbol : biểu tượng
Statement: câu lệnh, khai báo
Parameter: tham số
Argument: đối số
Declaration: kê khai
Terminated: chấm dứt
Syntax : cú pháp
Constant: hằng số
Expression: biểu thức
1. ( expected: thiếu ‘(‘
2. ) expected: thiếu ‘)’
3. , expected: thiếu ‘,’
4. : expected after private: thiếu ‘:’ sau private
5. : expected after protected: thiếu ‘:’ sau protected
6. : expected after public: thiếu ‘:’ sau public
7. < expected: thiếu dấu <
8. { expected:thiếu dấu {
9. } expected: thiếu dấu }
10. Array bounds missing ]: thiếu ‘]’ bao dãy
11. Array must have at least one element: dãy phải có ít nhất một phần tử
12. Array size too large: kích cỡ dãy quá lớn
13. Body already defined for this function: nội dung hàm này đã được viết.
14. Call of nonfunction: tên được gọi không được khai báo như một hàm, do khai báo hàm không chính xác hoặc viết sai tên hàm.
15. Cannot cast from 'type1' to 'type2': không thể ép từ kiểu ‘type1’ đến kiểu 'type2'
16. Cannot convert 'type1' to 'type2': không thể chuyển đổi 'type1' thành 'type2'
17. Cannot modify a const object: không thể thay đổi một đối tượng hằng (const)
18. Cannot overload 'main': không thể định nghĩa chồng hàm main
19. Cannot use tiny or huge memory model with Windows: không thể sử dụng mô hình bộ nhớ tiny hoặc huge với Windows
20. Cannot open such file or directory “xxx”: không thể mở file hoặc thư mục xxx
21. Cannot open “Debug\..” for writting: không thể mở file Debug\.. để ghi (hãyđóng CT đã chạy trước đây để có thể chạy lại CT)
22. Case outside of switch: ‘case’ bên ngoài switch
23. Case statement missing ‘:’: ‘case’ thiếu dấu ‘:’
24. Character constant must be one or two characters long: hằng ký tự chỉ có thể là một ký tự (‘a’) hoặc hai ký tự (‘\n’)
25. Compound statement missing }: thiếu dấu } cho khối lệnh (câu lệnh phức).
26. Constant expression required: dãy phải được khai báo với kích thước là hằng số(thường là do khai báo hằng (#define) không đúng).
27. Constant variable 'variable' must be initialized: biến có kiểu const phải được khởi tạo (vì ta không thể gán giá trị cho biến có kiểu const trong quá trình thi hành CT). Thực hành nhập môn lập trình 10
28. Could not find a match for argument(s): các đối số không phù hợp (kiểm tra lại khai báo hàm và các đối số truyền vào)
29. Could not find file 'filename': không thể tìm file 'filename'
30. Declaration does not specify a tag or an identifier: khai báo (kiểu struct hoặc kiểu union) không chứa thành phần
31. Declaration is not allowed here: không cho phép khai báo ở đây
32. Declaration missing ‘;’: khai báo thiếu dấu ‘;’
33. Declaration syntax error: khai báo sai lỗi cú pháp
34. Declaration terminated incorrectly: kết thúc khai báo không chính xác
35. Declaration was expected: khai báo được mong muốn ở đây nhưng không tìm thấy
36. Default argument value redeclared: giá trị của tham số mặc định bên trong hàm bị thay đổi
37. Default argument value redeclared for parameter 'parameter': giá trị của tham số (đối số) mặc định 'parameter' bên trong hàm bị thay đổi
38. Default expression may not use local variables: một biểu thức tham số (đối số)mặc định bên trong hàm không được phép sử dụng tham số khác
39. Default outside of switch: default bên ngoài switch
40. Default value missing: tham số theo sau một tham số mặc định phải có giá trị mặc định
41. Default value missing following parameter 'parameter': thiếu giá trị mặc định cho tham số 'parameter' (vì nó theo sau một tham số mặc định nên phải có giá trị mặc định)
42. Define directive needs an identifier: khai báo define cần có một tên
43. Delete array size missing ]: thiếu ‘]’ khi hủy một dãy
44. Division by zero: chia cho 0
45. do statement must have while: do phải có while
46. do-while statement missing do-while thiếu dấu ‘(’
47. do-while statement missing ): do-while thiếu dấu ‘)’
48. do-while statement missing ;: do-while thiếu dấu ‘;’
49. Duplicate case: mỗi case trong switch phải có giá trị đi kèm
50. Enum syntax error: khai báo kiểu enum sai cú pháp
51. Expression expected: một biểu thức được mong muốn ở đây nhưng ký hiệu hiện thời không thể bắt đầu cho một biểu thức
52. Expression of scalar type expected: mong muốn biểu thức có kiểu vô hướng. Các toán tử !, ++, và – yêu cầu một biểu thức có kiểu vô hướng (char, short, int,long, enum, float, double, long double, pointer)
53. Expression syntax: cú pháp biểu thức
54. File name too long: tên file qúa dài
55. For statement missing ‘(‘: câu lệnh for thiếu ‘(’
56. For statement missing ): câu lệnh for thiếu ‘)’
57. For statement missing ;: câu lệnh for thiếu ‘)’
58. 'function' cannot return a value: hàm không thể trả về giá trị (nó là hàm void)
59. 'function' must be declared with no parameters: hàm phải được khai báo với không tham số
60. 'function' must be declared with one parameter: hàm phải được khai báo với một tham số Thực hành nhập môn lập trình11
61. 'function' must be declared with two paraameters: hàm phải được khai báo với một tham số
62. 'function1' cannot be distinguished from 'function2': không thể phân biệt 'function1' với 'function2'
63. Function 'function' should have a prototype: hàm 'function' nên có tiêu đề.
64. Function call missing ): thiếu dấu ‘)’ khi gọi hàm.
65. Function should return a value: chưa trả về giá trị cho hàm
66. 'identifier' cannot start a parameter declaration: 'identifier' không thể bắt đầu cho khai báo một tham số
67. 'identifier' is not a member of struct: 'identifier' không phải là thành phần của struct
68. 'identifier' is not a non-static member and can't be initialized here: 'identifier' không phải là một biến tĩnh và không thể được khởi tạo ở đây
69. 'identifier' is not a parameter: 'identifier' không phải là một tham số
70. Identifier expected: mong muốn một định danh
71. If statement missing câu lệnh if thiếu ‘(‘
72. If statement missing ): câu lệnh if thiếu ‘)‘
73. Illegal character 'character' (0x'value'): hằng ký tự sai
74. Illegal structure operation: toán tử trên struct không đúng (chỉ có thể là: ‘.’, &,=)
75. Illegal use of floating point: toán tử trên số thực chấm động không đúng (chỉ có thể là: SHL, SHR, AND, OR, XOR, NOT, ? :, *, …)
76. Improper use of typedef 'identifier': kiểm tra khai báo 'identifier' ở dòng typedef
77. Incorrect number format: định dạng số không đúng
78. Incorrect use of default: sau default không có dấu ‘:’
79. Invalid use of dot: sử dụng dấu ‘.’ không đúng, ví dụ:
struct foo {
int x;
int y;
}p = {0,0};
int main (…)
{
p.x++; /* Đúng */
p. y++; /* Sai: Invalid use of dot */
return 0;
}
80. Lvalue required: thành phần bên trái của lệnh gán phải là biến
81. main must have a return type of int: hàm main phải return về kiểu int
82. Misplaced break: break không nằm trong switch hoặc một vòng lặp
83. Misplaced continue: continue không nằm trong một vòng lặp
84. Misplaced else: else không có if
85. Missing xxx before yyy: thiếu xxx trước yyy
86. Missing function header (old-style): sai tiêu đề ở phần định nghĩa hàm (có thểmthừa dấu ; sau tiêu đề)
87. Multiple declaration for 'identifier': trùng khai báo cho 'identifier'
88. Need an identifer to declare: cần một định danh cho khai báo
89. No : following the ?: không có : sau ? trong cấu trúc tam phân (… ? … : … ) Thực hành nhập môn lập trình 12
90. Not an allowed type: không cho phép kiểu này (chẳng hạn, không thể trả về dữ liệu kiểu mảng tĩnh cho hàm)
91. Numeric constant too large: hằng số quá lớn
92. new line in constant: thiếu dấu ”
93. operator [] missing ]: toán tử [] thiếu ]
94. sizeof may not be applied to a function: toán tử sizeof không thể áp dụng cho hàm
95. Size of 'identifier' is unknown or zero: kích thước của 'identifier' không biết hoặc là 0
96. Size of the type is unknown or zero: kích thước của kiểu không biết hoặc là 0
97. Statement missing ‘;’: thiếu dấu ‘;’
98. Structure size too large: kích thước của struct quá lớn
99. Switch selection expression must be of integral type: biểu thức chọn của switch phải là kiểu nguyên
100. unexpected end of file: thiếu }
101. xxx undeclared identifier: thiếu khai báo xxx
C++ là một ngôn ngữ mạnh, đa nền tảng. Việc học lập trình C++ không phải là chuyện đơn giản như nói là có thể làm được mà nó là một quá trình tích lũy kinh nghiệm trên cơ sở thực hành thường xuyên. Những người mới bắt đầu với ngôn ngữ này thường gặp phải những lỗi làm họ sớm nản lòng, nhưng thực sự những lỗi đó có quá khó không? Vì vậy bài viết này sẽ cố gắng giải thích một số lỗi cơ bản thường gặp phải đối với những ai mới bắt đầu (beginners) học lập trình C++.
1. Không khai báo biến (Undeclared Variables)
int main()
{
cin>>x;
cout<<x;
}
Tại sao chương trình trên lại bị lỗi nhỉ?
– Lý do là trình biên dịch của bạn không biết x là cái gì. Bạn cần phải khai báo biến x. Ví dụ như:
int main()
{
int x;
cin>>x;
cout<<x;
}
–> Hãy nhớ khai báo biến.
2. Không khởi tạo giá trị cho biến (uninitialized variable)
Hãy xem đoạn chương trình dưới đây:
int count;
while(count<100)
{
cout<<count;
}
Bạn tự hỏi, tại sao chương trình lại không in ra gì hết vậy?
Lưu ý rằng, ở đoạn chương trình trên, biên count chưa được khởi tạo giá trị. Vì vậy khi chương trình chạy nó có thể là giá trị bất kỳ nào trong dãy các số nguyên (int). Có thể nó sẽ có giá trị là 586 chẳng hạn, vậy thì nó sẽ không vào trong vòng lặp while khiến cho kết quả chương trình bị sai, cóthể chương trình sẽ in ra kết quả là các giá trị rác từ –1000 đến 99.
–> Nên nhớ khởi tạo giá trị cho biến.
3. Thiết lập một biết với một giá trị chưa khởi tạo
int a, b;
int sum=a+b;
cout<<"Enter two numbers to add: ";
cin>>b;
cout<<"The sum is: "<<sum;
When Run:
Enter two numbers to add:
1
3
The sum is: -1393
Có gì sai với chương trình trên?
Thông thường các lập trình viên mới bắt đầu tin rằng các biến làm việc giống như phương trình (equations). Nếu bạn chỉ định một biến bằng kết quả của một toán tử trên nhiều biến khác mà bất cứ khi nào những thay đổi biến số (ở đây là a và b), giá trị của biến cũng sẽ thay đổi. Trong C++, phép gán (assignment) không làm việc trong trường hợp này: đó là một cách đối phó. Khi bạn gán giá trị cho một biến, nó có có giá trị đó cho đến khi bạn gán cho nó một giá trị khác. Trong chương trình ví dụ trên, bởi vì a, b không được khởi tạo giá trị nên tổng của chúng sẽ là một giá trị rác ngẫu nhiên.
Có thể sửa chương trình trên như sau:
int a, b;
int sum;
cout<<"Enter two numbers to add: ";
cin>>b;
cin>>a;
sum=a+b;
cout<<"The sum is: "<<sum;
4. Sử dụng một dấu bằng trong phép so sánh (Using the single equal sign to check equality)
char x='Y';
while(x='Y')
{
//...
cout<<"Continue? (Y/N)";
cin>>x;
}
Tại sao vòng lặp của tôi không bao giờ kết thúc?
Nếu bạn sử dụng một dấu bằng trong phép so sánh, chương trình của bạn thay vì so sánh giá trịbên trái có đúng với giá trị bên phải hay không thì nó sẽ thực hiện phép gán giá trị bên phải cho bên trái, và phép gán này tất nhiên trả về giá trị TRUE. Do đó vòng lặp không bao giờ kết thúc. Dođó bạn nên nhớ sử dụng == cho phép so sánh của mình. Và lời khuyên trong trường hợp này là nênđặt biến phía bên phải giá trị để cho chương trình báo lỗi thay vì thực hiện một vòng lặp vô hạn. Chương trình có thể viết lại như sau:
char x='Y';
while('Y'==x)
{
//...
cout<<"Continue? (Y/N)";
cin>>x;
}
5. Không khai báo hàm (Undeclared function)
int main()
{
menu();
}
void menu(){ //...}
Chương trình trên đã xảy ra lỗi gì?
Trình biên dịch không biết hàm menu() được khai báo trong hàm main() là cái gì. Lý do là bạn đãđịnh nghĩa hàm menu() phía dưới hàm main(). Do đó bạn nên viết hàm menu() phía trên hàm main(), hoặc sử dụng một khai báo nguyên mẫu (prototype ) cho hàm menu() của bạn nếu bạn muốn định nghĩa nó bên dưới hàm main(), giống như:
void menu();
int main()
{
menu();
}
void menu(){ ...}
6. Thừa dấu chấm phẩy (Extra semicolons)
int x;
for(x=0; x<100; x++);
cout<<x;
Output chương trình của bạn là bao nhiêu? Có thực sự là tổng từ 0 – 99?
Tất nhiên kết quả chương trình đưa ra không phải theo ý bạn muốn. Bởi vì trong chương trình trên bạn đã thừa một dấu chấm phẩy (;) sau vòng lặp for. Nếu bạn đặt thừa một dấu chấm phẩy ở bất kỳ nơi nào trong chương trình thì thì rất có thể chương trình của bạn sẽ báo lỗi. Đoạn chương trình trên đúng sẽ là:
int x;
for(x=0; x<100; x++)
cout<<x;
7. Vượt quá giới hạn của mảng (Overstepping array boundaries)
int array[10];
//...
for(int x=1; x<=10; x++)
cout<<array[x];
Câu hỏi đặt ra: Tại sao chương trình có chạy ra có kết quả không đúng?
Bạn nên nhớ rằng, một mảng khi khai báo sẽ bắt đầu từ phần tử số 0 chứ không phải là số 1, và kếthúc sẽ là độ dài của mảng khai báo trừ đi 1. Ví dụ, nếu bạn có một mảng 10 phần tử, phần tử đầu tiên trong mảng của bạn là phần tử 0 và phần tử cuối cùng là phần tử thứ 9. Chương trình trên sửa lại như sau:
int array[10];
//...
for(int x=0; x<10; x++)
cout<<array[x];
8. Lạm dụng các toán tử &&, || (Misusing the && and || operator)
int value;
do
{
//...
value=10;
}
while(!(value==10) || !(value==20))
Chương trình trên sai, tại sao ?
Bạn nên nhớ một chút tới công thức của hàm Boolean là: !(A || B) tương đương với !A && !B
Do đó chương trình đúng sẽ là:
int value;
do
{
//...
value=10;
}while(!(value==10) && !(value==20))
Đây chỉ là bước khởi đầu trong con đường lập trình. Còn nhiều chướng ngại ở phía trước. Do đóchúng ta phải cố gắng thật nhiều!
Đăng ký:
Bài đăng (Atom)