Nhập ký tự để kết thúc vòng lặp

Đoạn code của mình là nhập vào thông tin học sinh, nhập phím “a” để kết thúc quá trình nhập , nhưng lỗi, các bạn giải thích giúp mình với

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

char DS[5000][30];
int count=0;
void Nhap() {
    printf("Nhap vao thong tin hoc sinh..\n");
    while (count <5000) {
        printf("nhap vao hoc sinh thu %d: ",count+1);
        gets(DS[count]);
        if ((DS[count])=="a") break;
        count++;
    }
}
int main() {
    Nhap();
}

Sao lại lấy mảng 1 chiều so với 1 ký tự?

Bạn khai báo 1 mảng 2 chiều char với số dòng là 5000 và số cột là 30 cột

Khi so sánh thì lại đi so sanh nguyên 1 hàng với 1 ký tự thì làm sao mà đúng, cách so sanh này máy sẽ so sánh giống thế này:

a\0\0\0\0\0<25ký tự \0> với a, nó đâu giống nhau :smile: chỉ so sánh phần tử đầu tiên thôi

	if (((int)DS[count][0]) == 97) break; 

Lần sau chuyển về ASCII để so sánh cho dễ ha

2 Likes

mảng không so sánh == được đâu. Dùng lệnh strcmp đi

if (!strcmp(DS[count], "a"))
2 Likes

em thấy nếu như sử dụng phần tử đầu tiên thì dùng == như trên cũng được mà :smile:.
Cách của anh thì so sánh được nhiều ký tự hơn(nhập abcdef để kết thúc chẳn hạn), cách của em thì so sánh được 1 ký tự.
Với lại trong bài thì chủ thread không dùng string.h nên đâu dùng đc strcmp.

Ở đây @Htc khai báo chuỗi em à, char DS[5000][30];. Nên trường hợp này dùng strcmp thôi :smile:

1 Like

ờ ha, quên mất đây là c =)) em nhìn sao nhầm qua c++ :smile:

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