Follow us on...
Follow us on Facebook

VN-Zoom.com chung tay vì Cộng đồng

Kaka - ứng dụng hát Karaoke trên mobile

Tuyển Mod Mobile diễn dàn Vn-Zoom.com 2014

Chiêm ngưỡng BaoMoi đẹp "tuyệt diệu" trên Windows Phone

Vui thể thao quà ý nghĩa

VPS siêu rẻ cho VNZ 150k/tháng.Server 2 CPU, 16GB RAM,300GB SAS 3tr/tháng
Trang 1/2 1 2 cuốicuối
kết quả từ 1 tới 15 trên 20
  1. #1
    ylotus's Avatar
    ylotus vẫn chưa có mặt trong diễn đàn Rìu Bạc
    Tham gia
    Mar 2008
    Bài
    320
    Cảm ơn
    48
    Điểm
    40/32 bài viết
    VR power
    0

    Question Bài tập C câu lệnh Switch với ký tự đây ai vào giúp em

    Em có bài tập này: Nhập vào 2 số x, y và 1 trong 4 toán tử +,-,*,/. Tương ứng với mỗi toán tử sẽ in ra kết quả tương ứng, yêu cầu use lệnh switch. nếu y=0 thì thông báo ko chia đc. Em ko giỏi j nên làm đại búa xua nhưng chưa ra mong mấy anh chỉ giúp, em cũng chả rành j môn này nên có j sai sót mong anh em thông củm bỏ qua nha.

    lệnh Switch với số thì làm ok còn với ký tự thì chưa bik rì @@. Nhập đc gia tri x y và toán tử bấm enter cái ko ra KQ j mà chỉ hiện Press any key to contious ^^

    //Chuong trinh tinh gia tri x y

    #include<stdio.h>
    #include<conio.h>

    void main()
    {
    int x,y;
    char t;

    printf("Nhap vao gia tri x: ");
    scanf("%d", &x);
    printf("Nhap vao gia tri y: ");
    scanf("%d", &y);
    printf("Nhap vao toan tu: ");
    scanf("%c", &t);

    switch(t)
    {
    case '+': printf("%d + %d = %d", x, y, x+y);
    case '-': printf("%d - %d = %d", x, y, x-y);
    case '*': printf("%d * %d = %d", x, y, x*y);
    case '/':
    if(y!=0)
    printf("%d / %d = %.2f", x, y, (x/y));
    else
    printf("Ko chia dc do y =0");
    }
    getch();
    }

  2. #2
    Tung_Huynh's Avatar
    Tung_Huynh vẫn chưa có mặt trong diễn đàn Cống hiến cho [V-Z]
    Tham gia
    Jul 2009
    Đến từ
    Thái Nguyên
    Bài
    6.792
    Cảm ơn
    1.543
    Điểm
    4.118/2.749 bài viết
    VR power
    0

    Default

    case phải có break;
    cái cuối ko cần

    khi nhập liệu mà thấy bị trôi lệnh thì dùng fflush(stdin);

    Code:
    #include<stdio.h>
    #include<conio.h>
    
    main()
    {
    int x,y;
    char t;
    
    printf("Nhap vao gia tri x: ");
    scanf("%d", &x);
    printf("Nhap vao gia tri y: ");
    scanf("%d", &y);
    printf("Nhap vao toan tu: ");
    fflush(stdin); scanf("%c", &t);
    
    switch(t)
    {
    case '+': printf("%d + %d = %d", x, y, x+y); break;
    case '-': printf("%d - %d = %d", x, y, x-y); break;
    case '*': printf("%d * %d = %d", x, y, x*y); break;
    case '/': 
    	if(y!=0) printf("%d / %d = %.2f", x, y, (float)x/y);
    	else printf("Ko chia dc do y =0");
    }
    getch();
    }


    ---------- Bài thêm lúc 01:31 ---------- Bài trước là lúc 01:30 ----------

    x và y đều là int nên cần ép sang số thực

  3. #3
    ylotus's Avatar
    ylotus vẫn chưa có mặt trong diễn đàn Rìu Bạc
    Tham gia
    Mar 2008
    Bài
    320
    Cảm ơn
    48
    Điểm
    40/32 bài viết
    VR power
    0

    Default

    Ak tại em gõ nhanh nên em quên cái break
    Anh có thể chỉ cách khác ko, chứ em mới học mấy bài căn bản C nên ko bik về cái fflush(stdin). Anh nói trôi lệnh ở đây là sao em chưa rõ lắm.

    Còn bài của anh thì em bỏ vô run thì nó chạy tốt ^^

  4. #4
    dinhka's Avatar
    dinhka vẫn chưa có mặt trong diễn đàn Rìu Sắt Đôi
    Tham gia
    Dec 2008
    Bài
    242
    Cảm ơn
    34
    Điểm
    59/41 bài viết
    VR power
    0

    Default

    hàm scanf củng bị trôi lệnh ah, thank
    Thay đổi nội dung bởi dinhka; 06-01-2012 lúc 12:27.
    Aal Izz Well !
    Hidden Content .vn

  5. #5
    ylotus's Avatar
    ylotus vẫn chưa có mặt trong diễn đàn Rìu Bạc
    Tham gia
    Mar 2008
    Bài
    320
    Cảm ơn
    48
    Điểm
    40/32 bài viết
    VR power
    0

    Default

    Còn cách nào khác ko ai vô chỉ em với @@

  6. #6
    anhkha26's Avatar
    anhkha26 vẫn chưa có mặt trong diễn đàn Búa Gỗ
    Tham gia
    Jan 2009
    Bài
    20
    Cảm ơn
    9
    Điểm
    0/0 bài viết
    VR power
    0

    Default

    fflush(stdin); để cho khỏi trôi dũ liệu thôi bạn ko còn cách nào nữa đâu
    Thay đổi nội dung bởi anhkha26; 06-01-2012 lúc 15:17.

  7. #7
    Tham gia
    Dec 2008
    Bài
    5
    Cảm ơn
    2
    Điểm
    0/0 bài viết
    VR power
    0

    Default

    em cũng mới học nên làm theo cách này . Có j sai thì thông cảm nhé
    #include <stdio.h>
    #include <conio.h>
    int main(){
    int a,b,c;
    char pheptinh;
    printf("nhap so thu nhat :");
    scanf("%d",&a);
    printf("nhap so thu hai :");
    scanf("%d",&b);
    printf("nhap phep tinh");
    fflush (stdin);
    scanf("%c",&pheptinh);
    if (pheptinh=='+'){
    c=a+b;
    printf("phep cong la:%d",c);
    }else if (pheptinh=='-'){
    c=a-b;
    printf("phep tru la:%d",c);
    }else if (pheptinh='*'){
    c=a*b;
    printf("phep nhan la:%d",c);
    }else {
    c=a/b;
    printf("phep chia la :%d",c);
    }
    }

  8. #8
    19-6's Avatar
    19-6 vẫn chưa có mặt trong diễn đàn Moderator
    Tham gia
    Sep 2008
    Đến từ
    Abyss
    Bài
    1.907
    Cảm ơn
    861
    Điểm
    3.393/1.516 bài viết
    VR power
    0

    Default

    Trích ylotus View Post
    Còn cách nào khác ko ai vô chỉ em với @@
    Nếu bạn không muốn dùng fflush(stdin) thì có thể làm như sau (thực chất là nhập t 2 lần)
    Code:
    #include<stdio.h>
    #include<conio.h>
    
    void main()
    {
     int x,y;
     char t;
     printf("Nhap vao gia tri x: ");
     scanf("%d",&x);
     printf("Nhap vao gia tri y: ");
     scanf("%d",&y);
     printf("Nhap vao toan tu: ");
     scanf("%c%c",&t,&t);
     switch(t)
     {
      case '+': printf("%d + %d = %d", x, y, x+y);break;
      case '-': printf("%d - %d = %d", x, y, x-y);break;
      case '*': printf("%d * %d = %d", x, y, x*y);break;
      case '/':
       if(y!=0)
        printf("%d / %d = %.2f", x, y, 1.0*x/y);
       else
        printf("Ko chia dc do y =0");
     }
     getch();
    }


  9. #9
    ylotus's Avatar
    ylotus vẫn chưa có mặt trong diễn đàn Rìu Bạc
    Tham gia
    Mar 2008
    Bài
    320
    Cảm ơn
    48
    Điểm
    40/32 bài viết
    VR power
    0

    Default

    Anh có thể giải thích thêm chỗ nhập t 2 lần ko anh, nó hoạt động như thế nào nhỉ

    ---------- Bài thêm lúc 18:48 ---------- Bài trước là lúc 18:46 ----------

    Trích sontung9x12345 View Post
    em cũng mới học nên làm theo cách này . Có j sai thì thông cảm nhé
    #include <stdio.h>
    #include <conio.h>
    int main(){
    int a,b,c;
    char pheptinh;
    printf("nhap so thu nhat :");
    scanf("%d",&a);
    printf("nhap so thu hai :");
    scanf("%d",&b);
    printf("nhap phep tinh");
    fflush (stdin);
    scanf("%c",&pheptinh);
    if (pheptinh=='+'){
    c=a+b;
    printf("phep cong la:%d",c);
    }else if (pheptinh=='-'){
    c=a-b;
    printf("phep tru la:%d",c);
    }else if (pheptinh='*'){
    c=a*b;
    printf("phep nhan la:%d",c);
    }else {
    c=a/b;
    printf("phep chia la :%d",c);
    }
    }
    bài này nó bắt dùng switch bạn ơi dù sao cũng thanks

    Cũng cám ơn anh Tung_Huynh lun nha ^^ để em xem thêm về mấy lệnh này. mà mấy lệnh này thuộc vào lệnh mở rộng hay lệnh j vậy mấy anh. tìm trong giáo trình ko thấy

  10. #10
    19-6's Avatar
    19-6 vẫn chưa có mặt trong diễn đàn Moderator
    Tham gia
    Sep 2008
    Đến từ
    Abyss
    Bài
    1.907
    Cảm ơn
    861
    Điểm
    3.393/1.516 bài viết
    VR power
    0

    Default

    Trích ylotus View Post
    Anh có thể giải thích thêm chỗ nhập t 2 lần ko anh, nó hoạt động như thế nào nhỉ
    Giải thích thêm về lỗi bị trôi lệnh:
    Lý do là khi nhập xong giá trị y, bạn phải nhấn enter. Phím enter sẽ để lại ký tự '\n' trong vùng đệm và lệnh scanf("%c",&t) (có tác dụng đọc kí tự từ bàn phím và gán vào biến t) ở ngay sau đó sẽ gán luôn kí tự '\n' vào biến t và sau đó nhảy quả lệnh tiếp theo. Cho nên mới cần lệnh fflush(stdin) dùng để xóa sạch vùng đệm trước khi nhập kí tự.

    Viết scanf("%c%c",&t,&t); cũng giống như là viết 2 câu lệnh scanf
    scanf("%c", &t);
    scanf("%c", &t);
    Do kí tự '\n' nên câu lệnh đầu bị vô hiệu hóa, phải thêm 1 lệnh nữa mới nhập được giá trị t


  11. Có 1 thành viên cảm ơn 19-6 cho bài viết này:
    taiem134 (07-01-2012)

  12. #11
    ylotus's Avatar
    ylotus vẫn chưa có mặt trong diễn đàn Rìu Bạc
    Tham gia
    Mar 2008
    Bài
    320
    Cảm ơn
    48
    Điểm
    40/32 bài viết
    VR power
    0

    Default

    Trích 19-6 View Post
    Giải thích thêm về lỗi bị trôi lệnh:
    Lý do là khi nhập xong giá trị y, bạn phải nhấn enter. Phím enter sẽ để lại ký tự '\n' trong vùng đệm và lệnh scanf("%c",&t) (có tác dụng đọc kí tự từ bàn phím và gán vào biến t) ở ngay sau đó sẽ gán luôn kí tự '\n' vào biến t và sau đó nhảy quả lệnh tiếp theo. Cho nên mới cần lệnh fflush(stdin) dùng để xóa sạch vùng đệm trước khi nhập kí tự.

    Viết scanf("%c%c",&t,&t); cũng giống như là viết 2 câu lệnh scanf
    scanf("%c", &t);
    scanf("%c", &t);
    Do kí tự '\n' nên câu lệnh đầu bị vô hiệu hóa, phải thêm 1 lệnh nữa mới nhập được giá trị t
    Vậy tại sao khi mình dùng hàm Switch nhưng với biến là giá trị 1,2,3... thì ko bị hiện tượng trên ạ

  13. #12
    19-6's Avatar
    19-6 vẫn chưa có mặt trong diễn đàn Moderator
    Tham gia
    Sep 2008
    Đến từ
    Abyss
    Bài
    1.907
    Cảm ơn
    861
    Điểm
    3.393/1.516 bài viết
    VR power
    0

    Default

    Trích ylotus View Post
    Vậy tại sao khi mình dùng hàm Switch nhưng với biến là giá trị 1,2,3... thì ko bị hiện tượng trên ạ
    1, 2, 3 là số chứ không phải kí tự.


  14. #13
    sealdangerous's Avatar
    sealdangerous vẫn chưa có mặt trong diễn đàn Rìu Bạc
    Tham gia
    Jan 2012
    Đến từ
    TP Đà Nẵng
    Bài
    331
    Cảm ơn
    136
    Điểm
    93/71 bài viết
    VR power
    0

    Default

    anh 19-6 ơi. em cũng đg làm 1 bài tương tự nhưng nó có thêm phép toán %(lấy phần dư). em lam như sau:
    Code:
    #include <stdio.h>
    #include <conio.h>
    int main()
    	{
    	int a,b,c;
        char pheptinh;
    	printf("nhap so thu nhat :");
    	scanf("%d",&a);
    	printf("nhap so thu hai :");
    	scanf("%d",&b);
    	printf("nhap phep tinh");
    	fflush (stdin);
    	scanf("%c",&pheptinh);
    	switch (pheptinh)
    	{
    		case'+':c=a+b;printf("%d + %d = %d\n",a,b,c);break;
    	case'-':c=a-b;printf("%d - %d = %d\n",a,b,c); break;
    	case'*':c=a*b;printf("%d*%d = %d\n",a,b,c);break;
    	case'/':c=a/b;printf("%d/%d = %d\n",a,b,c);break;
    	case '%':c=a%b;printf("%d % %d = %d\n",a,b,c);break;
    	default:printf("phep tinh nhap vao khong dung!! hay nhap lai phep tinh khac(+,-,*,/,%)\n");
    	}
    	printf("nhan 1 phim bat ki de tiep tuc!!\n");
    	getche();
    }
    Ở chỗ % màu đỏ thứ nhất nếu bỏ đi thì nó chạy đúng nhưng nếu ghi như vậy thì nó lại ra kết quả sai còn ở % màu đỏ thứ 2 màn hình chỉ hiện ra là (+,-,*,/,) không có % em k bít sao nữa,hiện giờ em muốn in ra kết quả luôn VD nhập 123 10 và % thì Kq là 123%10=3, mong mọi người chỉ giúp
    Thay đổi nội dung bởi sealdangerous; 10-01-2012 lúc 12:56.

  15. #14
    19-6's Avatar
    19-6 vẫn chưa có mặt trong diễn đàn Moderator
    Tham gia
    Sep 2008
    Đến từ
    Abyss
    Bài
    1.907
    Cảm ơn
    861
    Điểm
    3.393/1.516 bài viết
    VR power
    0

    Default

    Trích sealdangerous View Post
    anh 19-6 ơi. em cũng đg làm 1 bài tương tự nhưng nó có thêm phép toán %(lấy phần dư). em lam như sau:
    Code:
    #include <stdio.h>
    #include <conio.h>
    int main()
    	{
    	int a,b,c;
        char pheptinh;
    	printf("nhap so thu nhat :");
    	scanf("%d",&a);
    	printf("nhap so thu hai :");
    	scanf("%d",&b);
    	printf("nhap phep tinh");
    	fflush (stdin);
    	scanf("%c",&pheptinh);
    	switch (pheptinh)
    	{
    		case'+':c=a+b;printf("%d + %d = %d\n",a,b,c);break;
    	case'-':c=a-b;printf("%d - %d = %d\n",a,b,c); break;
    	case'*':c=a*b;printf("%d*%d = %d\n",a,b,c);break;
    	case'/':c=a/b;printf("%d/%d = %d\n",a,b,c);break;
    	case '%':c=a%b;printf("%d % %d = %d\n",a,b,c);break;
    	default:printf("phep tinh nhap vao khong dung!! hay nhap lai phep tinh khac(+,-,*,/,%)\n");
    	}
    	printf("nhan 1 phim bat ki de tiep tuc!!\n");
    	getche();
    }
    Ở chỗ % màu đỏ thứ nhất nếu bỏ đi thì nó chạy đúng nhưng nếu ghi như vậy thì nó lại ra kết quả sai còn ở % màu đỏ thứ 2 màn hình chỉ hiện ra là (+,-,*,/,) không có % em k bít sao nữa,hiện giờ em muốn in ra kết quả luôn VD nhập 123 10 và % thì Kq là 123%10=3, mong mọi người chỉ giúp
    % là kí tự đặt biệt, cho nên muốn hiển thị nó ra màn hình thì phải viết là %%
    Code:
    #include <stdio.h>
    #include <conio.h>
    int main()
    	{
    	int a,b,c;
        char pheptinh;
    	printf("nhap so thu nhat :");
    	scanf("%d",&a);
    	printf("nhap so thu hai :");
    	scanf("%d",&b);
    	printf("nhap phep tinh");
    	fflush (stdin);
    	scanf("%c",&pheptinh);
    	switch (pheptinh)
    	{
    		case'+':c=a+b;printf("%d + %d = %d\n",a,b,c);break;
    	case'-':c=a-b;printf("%d - %d = %d\n",a,b,c); break;
    	case'*':c=a*b;printf("%d*%d = %d\n",a,b,c);break;
    	case'/':c=a/b;printf("%d/%d = %d\n",a,b,c);break;
    	case '%':c=a%b;printf("%d %% %d = %d\n",a,b,c);break;
    	default:printf("phep tinh nhap vao khong dung!! hay nhap lai phep tinh khac(+,-,*,/,%%)\n");
    	}
    	printf("nhan 1 phim bat ki de tiep tuc!!\n");
    	getche();
    }


  16. #15
    sealdangerous's Avatar
    sealdangerous vẫn chưa có mặt trong diễn đàn Rìu Bạc
    Tham gia
    Jan 2012
    Đến từ
    TP Đà Nẵng
    Bài
    331
    Cảm ơn
    136
    Điểm
    93/71 bài viết
    VR power
    0

    Default

    Woa! sao nhanh zay?? em mới gửi mà anh đã trả lời rùi. vui wá thanks anh nha!! Ak mà cho em hỏi luôn ngoài % là kí tự đặc biệt ra trong C/C++ còn kí tự nào như vậy k anh,để sau này gặp lại phải lên hỏi lại vấn đề này thì kì lắm .hjhj
    Thay đổi nội dung bởi sealdangerous; 10-01-2012 lúc 14:02.

 

 
Trang 1/2 1 2 cuốicuối

Quyền sử dụng

  • Bạn không thể gửi chủ đề mới
  • Bạn không thể gửi trả lời
  • Bạn không thể gửi file đính kèm
  • Bạn không thể tự sửa bài viết của mình
  •