Lỗi expected primary-expression before '{' token"

Các bạn xem hộ mình, DEV báo lỗi “expected primary-expression before ‘{’ token”

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 main(int argc, char *argv[3]={"BT", "1722", "322"})
{
	if (argc == 3) {
		int x = atoi(argv[1]);
		int y = atoi(argv[2]);
		printf("%d + %d = %d", x, y, x+y);
	}
	else
		printf("Sai! VD: Cong 2912 1706");
getch();
}

bạn xem lại chỗ này xem

main(int argc, char *argv[3]={“BT”, “1722”, “322”})

dòng đó có vấn đề gì vậy bạn?


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
int main(int argc, char *argv[])
{
	if (argc==3)
		printf("%d
",atoi(argv[1])+atoi(argv[2]));
	else printf("not enough param
");
	getch();
	return 0;
}

argv là mảng tham số truyền vào từ dòng lệnh (command-line arguments), bạn không thể khởi tạo nó trong khai báo tham số được.

[QUOTE=lytieulong_269;32560]Các bạn xem hộ mình, DEV báo lỗi “expected primary-expression before ‘{’ token”
[/QUOTE]

//Demo on Visual Studio 2010
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
int main( int argc, const char* argv[] )
{
int x;
int y;
if ( argc == 3 )
{
x = atoi( argv[1] );
y = atoi( argv[2] );
printf( "%d + %d = %d
", x, y, x + y );
}
}


Bạn check thử code này xem, thấy cơ động hơn .

oki! Mình đã thử khởi tạo nó trong hàm và kết quả là vẫn xuất hiện lỗi tương tự. Ai xem lại giúp mình với!

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
int main(int argc, char *argv[])
{
     argv[4]= {"wefew","3432","332"};
	if (argc==3)
		printf("%d
",atoi(argv[1])+atoi(argv[2]));
	else printf("not enough param
");
	getch();
	return 0;
}

Dòng này lỗi nèk bạn, thèng bạn mình nó bảo thế rồi đi luôn chứ mình cũng không đủ trình để giải thích nữa:

 argv[4]= {"wefew","3432","332"};

p/s: Hình như nó liên quan gì đó giữa mảng và phần tử, mình thấy argv[4] là 1 phần tử của mảng mà.

Mảng argv luôn được tự động khởi tạo mỗi khi chạy chương trình nên bạn ko thể khởi tạo nó 1 lần nữa trong hàm main. VD bạn file test.exe với nội dung code :

int main(int argc, char *argv[])
{
        return 0;
}
  • Nếu chạy không có đối số : test.exe
    thì argv[0] = test.exe
  • Nếu chạy có đối số : test.exe 1 2 3
    thì argv[0] = test.exe, argv[1] = 1, argv[2] = 2, argv[3] = 3

à! Đối số thứ nhất là tên .exe của chương trình! Vậy nếu mình muốn thêm 2 đối số nữa thì làm cách nào vậy bạn?

[QUOTE=lytieulong_269;32603]à! Đối số thứ nhất là tên .exe của chương trình! Vậy nếu mình muốn thêm 2 đối số nữa thì làm cách nào vậy bạn?[/QUOTE]

Biến argv được khởi gán giá trị trước khi bất cứ lệnh nào trong hàm main chạy. Tham số truyền vào chính là toàn bộ câu lệnh đã sử dụng khi gọi chương trình từ giao diện dòng lệnh (command line). Việc sử dụng code để thay đổi giá trị của argv không có mấy ý nghĩa.

Dĩ nhiên em có thể làm được, bằng cách khai báo một biến mới rồi gán argv bằng biến đó, nhưng làm vậy để làm gì?

Em không nói mục đích của mình làm sao mọi người giúp em được?

[QUOTE=lytieulong_269;32603]à! Đối số thứ nhất là tên .exe của chương trình! Vậy nếu mình muốn thêm 2 đối số nữa thì làm cách nào vậy bạn?[/QUOTE]
Suy nghĩ khác đi 1 chút đi, tại sao cứ phải gò bó ?
Nếu ta không thể thay đổi 1 cái gì đó, vậy thì ta hãy copy nó đi, rồi ta thay đổi trên bản sao của nó
Ví dụ:
argv không thay đổi đc
=>
char* temp;
for (i = 0;i < argc;++i) temp* = argv*;…

Nhưng đối số vẫn chưa có thì làm sao mà gán được bạn? Mình muốn “gán” trước sau đó thực hiện phép tính atoi(argv[1]) + atoi(argv[2]) …

[QUOTE=lytieulong_269;32609]Nhưng đối số vẫn chưa có thì làm sao mà gán được bạn? Mình muốn “gán” trước sau đó thực hiện phép tính atoi(argv[1]) + atoi(argv[2]) …[/QUOTE]
Bạn phải sử dụng giao diện dòng lệnh (command line) - trên window nó là chương trình cmd.exe đấy. Đối số chính là dòng lệnh mà bạn đã gõ để gọi thực thi chương trình. Bạn xem lại thật kỹ post #8, đã có người diễn giải rồi đấy.