Announcement

Collapse
No announcement yet.

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

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C++] 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"
    Code:
    #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();
    }

  • #2
    bạn xem lại chỗ này xem
    main(int argc, char *argv[3]={"BT", "1722", "322"})
    Be different and always different
    http://archlinuxvn.org/
    http://theslinux.org
    http://lab.infosec.xyz

    Comment


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

      Comment


      • #4
        Code:
        #include <stdio.h>
        #include <conio.h>
        #include <stdlib.h>
        using namespace std;
        int main(int argc, char *argv[])
        {
        	if (argc==3)
        		printf("%d\n",atoi(argv[1])+atoi(argv[2]));
        	else printf("not enough param\n");
        	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.
        Last edited by 10520346; 26-12-2011, 17:57.

        Comment


        • #5
          Originally posted by lytieulong_269 View Post
          Các bạn xem hộ mình, DEV báo lỗi "expected primary-expression before '{' token"
          Code:
          //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\n", x, y, x + y );
          		
          	}
          
          }


          Bạn check thử code này xem, thấy cơ động hơn .
          Last edited by 10520541; 26-12-2011, 17:46.

          Comment


          • #6
            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!

            Code:
            #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\n",atoi(argv[1])+atoi(argv[2]));
            	else printf("not enough param\n");
            	getch();
            	return 0;
            }

            Comment


            • #7
              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à.

              Comment


              • #8
                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 :

                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

                Comment


                • #9
                  à! Đố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?

                  Comment


                  • #10
                    Originally posted by lytieulong_269 View Post
                    à! Đố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?
                    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?

                    Comment


                    • #11
                      Originally posted by lytieulong_269 View Post
                      à! Đố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?
                      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[i] = argv[i];......
                      Khoảng cách giữa bạn và ước mơ của bạn là bao xa ?

                      Comment


                      • #12
                        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]) ......

                        Comment


                        • #13
                          Originally posted by lytieulong_269 View Post
                          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]) ......
                          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.

                          Comment

                          LHQC

                          Collapse
                          Working...
                          X