Em không hiểu code liên quan đến Đối số của Hàm main()
Trang 1 trong tổng số 1 trang
Em không hiểu code liên quan đến Đối số của Hàm main()
Thầy giải thích dùm em code dưới đây ạ. Em không hiểu lắm.
int main(int argc, char * argv[])
{
if (argc == 2)
SoLan = atoi(argv[1]);
}
Admin:
- Hàm main() có 2 đối số: argc (để nhận số Tham số dòng lệnh) và argv (để nhận chính các tham số dòng lệnh).
- Em hãy tạo một Shortcut (lệnh tắt) tới chương trình .EXE của mình. Phím phải chuột tại lệnh tắt này, chọn Properties sẽ thấy và sửa được Các tham số dòng lệnh: Tham số 1 là Đường dẫn tới .EXE tương ứng (thường được đặt trong cặp " "); Tham số 2 lúc đầu không có, nên em phải gõ thêm một số nguyên (ví dụ, số 3) cách Tham số 1 ít nhất bằng 1 dấu cách. Tham số 2 của dòng lệnh như vậy chính là Số lần giải phương trình, cần truyền vào Hàm main() thông qua Đối số argv (một mảng xâu ký tự, đúng hơn: một mảng con trỏ tới các xâu ký tự của các tham số dòng lệnh tương ứng).
- Hàm main() bắt đầu bằng cấu trúc điều khiển if kiểm tra xem giá trị của argc có bằng 2 hay không. Nếu bằng 2, nghĩa là có 2 tham số dòng lệnh, mà Tham số dòng lệnh thứ 2 là số 3 mà em đã nhập trong Properties của Shortcut ở trên.
- Phần tử mảng argv[1] trỏ tới số 3 đó ở dạng xâu ký tự, do đó cần dùng hàm atoi() để chuyển đổi thành một số kiểu int (số nguyên 4 byte trên máy tính 32-bit), rồi gán cho biến SoLan.
- Nếu argc chứa số 1 (chứng tỏ Không có Tham số dòng lệnh thứ 2, và Dòng lệnh trong Shortcut chỉ có 1 tham số là Đường dẫn tới .EXE tương ứng, không có số nào như số 3 tiếp sau), biến SoLan không thay đổi và chứa số 1 ban đầu theo mặc định (default).
- Như vậy, bằng cách trên, có thể truyền Số lần lặp giải PTB2 từ Dòng lệnh vào Hàm main() của chương trình.
- Bài tập: Thêm Tham số dòng lệnh thứ 3 là Số milli giây cần truyền cho hàm Sleep() ở cuối Hàm main() !
int main(int argc, char * argv[])
{
if (argc == 2)
SoLan = atoi(argv[1]);
}
Admin:
- Hàm main() có 2 đối số: argc (để nhận số Tham số dòng lệnh) và argv (để nhận chính các tham số dòng lệnh).
- Em hãy tạo một Shortcut (lệnh tắt) tới chương trình .EXE của mình. Phím phải chuột tại lệnh tắt này, chọn Properties sẽ thấy và sửa được Các tham số dòng lệnh: Tham số 1 là Đường dẫn tới .EXE tương ứng (thường được đặt trong cặp " "); Tham số 2 lúc đầu không có, nên em phải gõ thêm một số nguyên (ví dụ, số 3) cách Tham số 1 ít nhất bằng 1 dấu cách. Tham số 2 của dòng lệnh như vậy chính là Số lần giải phương trình, cần truyền vào Hàm main() thông qua Đối số argv (một mảng xâu ký tự, đúng hơn: một mảng con trỏ tới các xâu ký tự của các tham số dòng lệnh tương ứng).
- Hàm main() bắt đầu bằng cấu trúc điều khiển if kiểm tra xem giá trị của argc có bằng 2 hay không. Nếu bằng 2, nghĩa là có 2 tham số dòng lệnh, mà Tham số dòng lệnh thứ 2 là số 3 mà em đã nhập trong Properties của Shortcut ở trên.
- Phần tử mảng argv[1] trỏ tới số 3 đó ở dạng xâu ký tự, do đó cần dùng hàm atoi() để chuyển đổi thành một số kiểu int (số nguyên 4 byte trên máy tính 32-bit), rồi gán cho biến SoLan.
- Nếu argc chứa số 1 (chứng tỏ Không có Tham số dòng lệnh thứ 2, và Dòng lệnh trong Shortcut chỉ có 1 tham số là Đường dẫn tới .EXE tương ứng, không có số nào như số 3 tiếp sau), biến SoLan không thay đổi và chứa số 1 ban đầu theo mặc định (default).
- Như vậy, bằng cách trên, có thể truyền Số lần lặp giải PTB2 từ Dòng lệnh vào Hàm main() của chương trình.
- Bài tập: Thêm Tham số dòng lệnh thứ 3 là Số milli giây cần truyền cho hàm Sleep() ở cuối Hàm main() !
NguyenDucAnh- Tổng số bài gửi : 13
Join date : 20/02/2016
Age : 28
Đến từ : Đăk Lăk
Re: Em không hiểu code liên quan đến Đối số của Hàm main()
Em cảm ơn thầy ạ. Em đã hiểu và viết code của em. Thầy xem có sai sót đoạn nào ạ.
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <Windows.h>
using namespace std;
void GiaiPhuongTrinhBacHai();
int a, b, c, delta, i, SoLan = 1, TatDen = 3000;
void main(int Nguyen, char * Duc[], char * Anh[])
{
if ((Nguyen == 2)||(Nguyen == 3))
{
SoLan = atoi(Duc[1]);
TatDen = atoi(Anh[1]);
TatDen *= 1000;
}
cout << "Giai phuong trinh bac hai\n\n\n";
for (i = 1; i <= SoLan; i++)
{
cout << "- Phuong trinh thu " << i << ":\n\n";
do
{
cout <<"He So A: "; cin>> a;
} while (a==0);
cout <<"He So B: "; cin>> b;
cout <<"He So C: "; cin>> c;
GiaiPhuongTrinhBacHai();
}
Sleep (TatDen);
}
void GiaiPhuongTrinhBacHai()
{
delta = b*b-4*a*c;
if (delta < 0)
cout << "phuong trinh vo nghiem\n\n";
else
if (delta == 0)
cout << "Phuong trinh co nghiem kep la:\nx = " << -b/(2*a) << "\n\n";
else
cout << "Phuong trinh co hai nghiem phan biet:\nx = "
<< (-b-sqrt(delta))/(2*a)
<< endl << "x = "
<< (-b+sqrt(delta))/(2*a)
<< "\n\n";
}
Admin:
- Em vẫn chưa thực sự hiểu về các đối số của Hàm main() !
- Hàm main() chỉ có 2 đối số theo chuẩn C quy định: argc (để nhận số Tham số dòng lệnh) và argv (để nhận chính các tham số dòng lệnh).
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <Windows.h>
using namespace std;
void GiaiPhuongTrinhBacHai();
int a, b, c, delta, i, SoLan = 1, TatDen = 3000;
void main(int Nguyen, char * Duc[], char * Anh[])
{
if ((Nguyen == 2)||(Nguyen == 3))
{
SoLan = atoi(Duc[1]);
TatDen = atoi(Anh[1]);
TatDen *= 1000;
}
cout << "Giai phuong trinh bac hai\n\n\n";
for (i = 1; i <= SoLan; i++)
{
cout << "- Phuong trinh thu " << i << ":\n\n";
do
{
cout <<"He So A: "; cin>> a;
} while (a==0);
cout <<"He So B: "; cin>> b;
cout <<"He So C: "; cin>> c;
GiaiPhuongTrinhBacHai();
}
Sleep (TatDen);
}
void GiaiPhuongTrinhBacHai()
{
delta = b*b-4*a*c;
if (delta < 0)
cout << "phuong trinh vo nghiem\n\n";
else
if (delta == 0)
cout << "Phuong trinh co nghiem kep la:\nx = " << -b/(2*a) << "\n\n";
else
cout << "Phuong trinh co hai nghiem phan biet:\nx = "
<< (-b-sqrt(delta))/(2*a)
<< endl << "x = "
<< (-b+sqrt(delta))/(2*a)
<< "\n\n";
}
Admin:
- Em vẫn chưa thực sự hiểu về các đối số của Hàm main() !
- Hàm main() chỉ có 2 đối số theo chuẩn C quy định: argc (để nhận số Tham số dòng lệnh) và argv (để nhận chính các tham số dòng lệnh).
NguyenDucAnh- Tổng số bài gửi : 13
Join date : 20/02/2016
Age : 28
Đến từ : Đăk Lăk
Re: Em không hiểu code liên quan đến Đối số của Hàm main()
Em mới sửa ạ
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <Windows.h>
using namespace std;
void GiaiPhuongTrinhBacHai();
int a, b, c, delta, i, SoLan = 1, TatDen = 3000;
void main(int Duc, char * Anh[])
{
if (Duc == 2)
SoLan = atoi(Anh[1]);
else
if (Duc == 3)
{
SoLan = atoi(Anh[1]);
TatDen = atoi(Anh[2]);
TatDen *= 1000;
}
cout << "Giai phuong trinh bac hai\n\n\n";
for (i = 1; i <= SoLan; i++)
{
cout << "- Phuong trinh thu " << i << ":\n\n";
do
{
cout <<"He So A: "; cin>> a;
} while (a==0);
cout <<"He So B: "; cin>> b;
cout <<"He So C: "; cin>> c;
GiaiPhuongTrinhBacHai();
}
Sleep (TatDen);
}
void GiaiPhuongTrinhBacHai()
{
delta = b*b-4*a*c;
if (delta < 0)
cout << "phuong trinh vo nghiem\n\n";
else
if (delta == 0)
cout << "Phuong trinh co nghiem kep la:\nx = " << -b/(2*a) << "\n\n";
else
cout << "Phuong trinh co hai nghiem phan biet:\nx = "
<< (-b-sqrt(delta))/(2*a)
<< endl << "x = "
<< (-b+sqrt(delta))/(2*a)
<< "\n\n";
}
Admin:
- Chúc mừng em đã Hiểu và Giải đúng Bài tập liên quan đến Đối số của Hàm main() !
- Nên dùng tên đối số của main() theo quy định chuẩn là argc và argv (em dùng Duc và Anh tương ứng cho các tên này, tuy không sai).
- Tham số dòng lệnh thứ 3 của em là một số nguyên chỉ Số giây (chứ không phải milli giây) cần Ngủ (Sleep), nên trong chương trình em đã dùng lệnh TatDen *= 1000 để nhân giá trị của biến TatDen lên 1000 (vì hàm Sleep đòi hỏi số milli giây), do 1 giây = 1000 milli giây. Thày đánh giá cao cách làm này !
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <Windows.h>
using namespace std;
void GiaiPhuongTrinhBacHai();
int a, b, c, delta, i, SoLan = 1, TatDen = 3000;
void main(int Duc, char * Anh[])
{
if (Duc == 2)
SoLan = atoi(Anh[1]);
else
if (Duc == 3)
{
SoLan = atoi(Anh[1]);
TatDen = atoi(Anh[2]);
TatDen *= 1000;
}
cout << "Giai phuong trinh bac hai\n\n\n";
for (i = 1; i <= SoLan; i++)
{
cout << "- Phuong trinh thu " << i << ":\n\n";
do
{
cout <<"He So A: "; cin>> a;
} while (a==0);
cout <<"He So B: "; cin>> b;
cout <<"He So C: "; cin>> c;
GiaiPhuongTrinhBacHai();
}
Sleep (TatDen);
}
void GiaiPhuongTrinhBacHai()
{
delta = b*b-4*a*c;
if (delta < 0)
cout << "phuong trinh vo nghiem\n\n";
else
if (delta == 0)
cout << "Phuong trinh co nghiem kep la:\nx = " << -b/(2*a) << "\n\n";
else
cout << "Phuong trinh co hai nghiem phan biet:\nx = "
<< (-b-sqrt(delta))/(2*a)
<< endl << "x = "
<< (-b+sqrt(delta))/(2*a)
<< "\n\n";
}
Admin:
- Chúc mừng em đã Hiểu và Giải đúng Bài tập liên quan đến Đối số của Hàm main() !
- Nên dùng tên đối số của main() theo quy định chuẩn là argc và argv (em dùng Duc và Anh tương ứng cho các tên này, tuy không sai).
- Tham số dòng lệnh thứ 3 của em là một số nguyên chỉ Số giây (chứ không phải milli giây) cần Ngủ (Sleep), nên trong chương trình em đã dùng lệnh TatDen *= 1000 để nhân giá trị của biến TatDen lên 1000 (vì hàm Sleep đòi hỏi số milli giây), do 1 giây = 1000 milli giây. Thày đánh giá cao cách làm này !
NguyenDucAnh- Tổng số bài gửi : 13
Join date : 20/02/2016
Age : 28
Đến từ : Đăk Lăk
Similar topics
» Ôn tập thi Cuối kỳ
» Bạn nào biết xin giải thích dùm mình phần code của hàm main() thực thi bài toán SXTT Phần này mình chưa hiểu lắm
» Cảm ơn bạn DaoMinhTri đã giải thích cho minh hiểu phần code bây giờ mình hiểu được phần code của sản xuất tiêu thụ
» Thảo luận Bài 6
» Bạn nào biết xin giải thích dùm mình phần code của hàm main() thực thi bài toán SXTT
» Bạn nào biết xin giải thích dùm mình phần code của hàm main() thực thi bài toán SXTT Phần này mình chưa hiểu lắm
» Cảm ơn bạn DaoMinhTri đã giải thích cho minh hiểu phần code bây giờ mình hiểu được phần code của sản xuất tiêu thụ
» Thảo luận Bài 6
» Bạn nào biết xin giải thích dùm mình phần code của hàm main() thực thi bài toán SXTT
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết