Follow us on...
Follow us on Twitter Follow us on Facebook Watch us on YouTube

Giúp các bé đáng thương ấy với

Gameshow “Ai Là Triệu Phú” trên VTV đang chờ đón bạn – Tải ngay!

Bán đấu giá ủng hộ từ thiện

Sự kiện công nghệ lớn nhất trong năm của Sony sắp đổ bộ Hà Nội

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

Tin tức công nghệ mới
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
    324
    Cảm ơn
    49
    Điểm
    40/32 bài viết

    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.776
    Cảm ơn
    1.540
    Điểm
    4.134/2.750 bài viết

    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
    324
    Cảm ơn
    49
    Điểm
    40/32 bài viết

    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
    245
    Cảm ơn
    34
    Điểm
    64/43 bài viết

    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.
    BẠN CÓ MUỐN OẴN TÙ TÌ LUÔN THẮNG
    THỬ APP NÀY NHÉ !


  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
    324
    Cảm ơn
    49
    Điểm
    40/32 bài viết

    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

    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

    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.904
    Cảm ơn
    858
    Điểm
    3.427/1.515 bài viết

    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
    324
    Cảm ơn
    49
    Điểm
    40/32 bài viết

    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.904
    Cảm ơn
    858
    Điểm
    3.427/1.515 bài viết

    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
    324
    Cảm ơn
    49
    Điểm
    40/32 bài viết

    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.904
    Cảm ơn
    858
    Điểm
    3.427/1.515 bài viết

    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
    334
    Cảm ơn
    136
    Điểm
    93/71 bài viết

    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.904
    Cảm ơn
    858
    Điểm
    3.427/1.515 bài viết

    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
    334
    Cảm ơn
    136
    Điểm
    93/71 bài viết

    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
  •