Scanf không scan được

Ae cho mình hỏi đề bài yêu cầu nhập vào 2 số và cả toán tử thì mình khai báo tt là char và cho lệnh scanf như thế nhưng không hiểu tại sao tới lệnh nhập toán tử là nó lại nhảy ra không nhập được. Không biết là code bị lỗi chỗ nào vật ae?

#include<stdio.h>
int main()
{
	int x,y;
	char tt;
	printf("Nhap vao 2 so nguyen x va y: ");
	scanf("%d%d",&x,&y);
	printf("Nhap vao toan tu cua ban: ");
	scanf("%c",&tt);
}
  1. scanf("%d%d",&x,&y); cậu kỳ vọng nếu nhập 123, thì (x = 1, y = 23), hay (x = 123, y = )? :smile:
  2. Cậu cần clear buffer sau mỗi lần gọi scanf.
scanf(...);
while(getchar() != '\n'); // clear buffer

Scanf thứ 2 bị “nhảy” vì buffer vẫn còn ký tự enter có từ lệnh scanf (hơi sida) trước của cậu.

6 Likes

Ngoài ra còn có một trick khá hay để clear buffer khi dùng scanf() là thêm một khoảng trống vào trc scan format.

#include <stdio.h>

int main() {
  int a, b;
  char op;

  scanf("%d %d", &a, &b);
  scanf(" %c", &op); // chừa ra một khoảng trống trc %c

  printf("%d %c %d\n", a, op, b);
}

Inp:

1    2

   +

Out:

1 + 2
5 Likes

Tks 2 ông nhá, nhờ hai ông tôi mà tôi vừa tiếp thu được thêm kiến thức mới. Tôi newbie nên còn nhiều cái chưa biết hix

1 Like

Tick solution câu trl của Lib sempai chứ, mình chỉ bổ sung th mà. :stuck_out_tongue:

5 Likes

Nah, cậu show cậu ấy solution xịn mà :smile:
Tick solution ở comment của cậu là tốt nhất rồi :smile:

5 Likes

Do tôi mới học nên tôi đọc hiểu cái nào thì tôi tích cái đó :v

Nếu mà tick được 2 cái tôi tích cho cả 2 ông luôn tôi tks cả 2 ông mà :v

Ae trên đây ai cũng nhiệt tình hết cháy quá :fire: :fire: :fire:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?