01/10/2018, 11:38

Trợ giúp bài tập C

em đang gặp một bài toán như thế này,
thì vấn đề ở đây là em không biết nhập vào theo kiểu biến char hay biến int
biến int thì không nhận đc kí tự A,B,C
mà biến char thì em gặp lỗi với số 10 vì nó ko nhập được số 10.
mà chuyển sang mảng string char a[2] thì nó không chạy ạ
có ai cho em hướng giải quyết đc ko ạ ?

nghia viết 13:48 ngày 01/10/2018

Chào sockyone!
Cho mình hỏi nhập 1 lần hay 2 lần. Nếu 1 lần thì có space phải không?

SuperHackerProNo1ty viết 13:54 ngày 01/10/2018

đang làm bài tập tuần 4 à bác

Nam Phan viết 13:44 ngày 01/10/2018

có space bác ạ.
nãy mình thử dùng mảng string nhưng vẫn không được,
( dùng a là string , c là int : if (a==“2”) c=2 ) sử dụng như thế có đúng ko nhỉ
mình in ra tổng c+d ( c là a, d là b) nhưng kết quả luôn là 0 nếu mình gán c,d=0 từ đầu và là 1 nếu mình k gán

HK boy viết 13:42 ngày 01/10/2018

dùng a là string , c là int : if (a==“2”) c=2

Đúng cú pháp cơ bản của if rồi, sao bạn vẫn phải hỏi lại?

thì vấn đề ở đây là em không biết nhập vào theo kiểu biến char hay biến int

Nhập string rồi chuyển thành số tương ứng.

nghia viết 13:43 ngày 01/10/2018

Chào sockyone!
Mình nói bạn dùng mảng char nha!
1 số hàm bạn cần tìm hiểu strtok(), fgets(). dùng switch…case giải quyết các trường hợp có thể xảy ra để tính kết quả. Mình chỉ gợi ý thôi bạn tìm hiểu thì sẽ thấy hướng giải quyết từ từ thôi nha! Chúc bạn thành công. Nếu có gì không hiểu thì hỏi mình, Nếu bạn hiểu các hàm này thì đủ giải quyết.

Lương Thế Hải viết 13:39 ngày 01/10/2018

Bạn có thể cho mình biết là tại sao mảng char[2] không chạy được không.

Mình có một ý tưởng là:
Vì A là ký tự đặc biệt thì nếu nó xuất hiện đầu tiên thì mình chuyển nó sang cái thứ hai

Tiếp theo, bạn dùng strlen để xem số lượng ký tự trong mảng:
Nếu có 2 ký tự. Bạn dùng strcmp xem liệu đó có phải là 10 không
Nếu chỉ có 1 ký tự thì bạn dùng isdigit để xem đó có phải số không rồi chuyển nó thành số bằng cách charPresent - ‘0’ . Còn nếu là chữ thì kiểm tra ký tự đầu tiên có phải là J,Q,K không nếu đúng cho nó trả về 10

Phần còn lại thì bạn chắc có thể làm tiếp được

Nam Phan viết 13:50 ngày 01/10/2018
#include <stdio.h>
#include <string.h>

int main()
{
    char a[10],b[10];
    int c,d;
    scanf("%s %s", a,b);
    
    if (a=="A" && b=="A") printf("2");
    else
    {
	
    if (a=="A") c=11;
    if (b=="A") d=11;
    if (a=="J" || a=="Q" || a=="K") c=10;
    if (b=="J" || b=="Q" || b=="K") d=10;
    if (a=="2") c=2;
    if (a=="3") c=3;
    if (a=="4") c=4;
    if (a=="5") c=5;
    if (a=="6") c=6;
    if (a=="7") c=7;
    if (a=="8") c=8;
    if (a=="9") c=9;
    if (a=="10") c=10;
    
    if (b=="2") d=2;
    if (b=="3") d=3;
    if (b=="4") d=4;
    if (b=="5") d=5;
    if (b=="6") d=6;
    if (b=="7") d=7;
    if (b=="8") d=8;
    if (b=="9") d=9;
    if (b=="10") d=10;
     
    
    
    printf("%d", c+d);	
	}
    
    return 0;
    
}

mình không nắm rõ về các kiểu dữ liệu nên sử dụng cách thủ công này tuy hơi dài nhưng về lí thì đúng,
nhưng đến khi nhập test thì test gì cũng ra bằng 1 là thế nào nhỉ ? ai dò lỗi hộ đc ko ạ ?

HK boy viết 13:40 ngày 01/10/2018

scanf("%s %s", a,b);

Bỏ dấu cách xem có chuyện gì xảy ra.

Nam Phan viết 13:47 ngày 01/10/2018

Vẫn ra 1 hết.
check lại dùm mình xem có lỗi gì được không ạ ?

HK boy viết 13:52 ngày 01/10/2018

Do máy bạn =))) Mình chạy ở đây và ngon ơ =))

Ideone.com

Ideone.com

Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.

Nam Phan viết 13:54 ngày 01/10/2018

không phải đâu
9 + J phải ra 19 chứ không phải 22.
mình thử lại các loại biến thì đều ra là 22. cũng giống như trên máy mình đều ra 1
( cách chọn biến random khác nhau giữa 2 nền tảng )
mình nghi ngờ phần nhập hay phần if của mình có vấn đề bạn check kĩ giúp mình đc k

rogp10 viết 13:40 ngày 01/10/2018

mình không nắm rõ về các kiểu dữ liệu

Thớt về xem cho kĩ giáo trình phần chuỗi nhé, đặc biệt là phần so sánh.

HK boy viết 13:45 ngày 01/10/2018

Không thể so sánh trực tiếp xâu như vậy. Phải dùng strcmp.

Nam Phan viết 13:46 ngày 01/10/2018

cám ơn nhé nhưng bài mình dài quá

HK boy viết 13:55 ngày 01/10/2018

bài mình dài quá

Thế này đã là gì.

Code mình, đang code dở:

sycoi001 viết 13:47 ngày 01/10/2018

Xài switch case đi.
Với lại so sánh chuỗi rồi gán xài dấu “” hay ‘’ có ảnh hưởng gì ko nhỉ.

HK boy viết 13:51 ngày 01/10/2018

Cái chính là không so sánh được trực tiếp.

xài dấu “” hay ‘’ có ảnh hưởng gì ko nhỉ.

Ai bảo không.

'c' -> kí tự c
"c" -> xâu chỉ có kí tự c

'ab' -> lỗi
"ab" -> xâu có 2 kí tự a và b
sycoi001 viết 13:39 ngày 01/10/2018

Thì đó, bởi vậy tui mới hỏi là so sánh chuỗi kiểu đó là đúng hay sai kakakaka.
String compare chưa chịu xài!

Nguyễn Quốc Hoàng viết 13:47 ngày 01/10/2018

Code của tớ nè

#include<stdio.h>
int TinhDiem(char *a,char *b);
int Convert(char *s);
int main(){
	char a[3],b[3];
	printf("Nhap quan bai: "); fflush(stdin); scanf("%s %s",a,b);
	printf("Diem so la %d",TinhDiem(a,b));
}
int TinhDiem(char *a,char *b){
	int s1,s2;
	s1 = Convert(a);
	s2 = Convert(b);
	if(s1==0 || s2==0){
		return 0;
	}
	if(s1==11&&s2==11) return 2;
	if(s1==11){
		if(s2>11) return 1+s2;
	}
	if(s2==11){
		if(s1>11) return 1+s1;
	}
	return s1+s2;
}
int Convert(char *s){
	int res,a,b;
	if(s[0]>'0' && s[0]<'9'){//neu la ky tu dang so
		res = s[0]&0x0F;
		if(!s[1]) return res;
		if(s[1]<='0'&&s[1]<'9'){
			res = (res<<3)+(res<<1);//res*=10
			res += s[1] & 0x0F;//res +=s[1] to number
		}else{
			res = 0;
		}
	}else{//neu khong phai
		switch(s[0]&0xDF){
			case 'A':
			res = 11;
			break;
			case 'J':
			res = 10;
			break;
			case 'Q':
			res = 10;
			break;
			case 'K':
			res = 10;
			break;
			default:
			res = 0;
			break;
		}
	}
	return res;
}
Bài liên quan
0