Random ra sai số lượng ký tự được nhập

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
 
void rand_text(int length, char *result) {
    int i, rand_int;
    char char_set[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz&quot";
 
    for (i = 0; i <length; i++) {
        if(i%5==0 ){
            result[i] = ' ';
        }else{
            result[i] = char_set[rand() % sizeof(char_set)];
        }
        
    }
    result[length] = 0;
}
 
int main(void){
    printf("Nhap đo dai chuoi: ");
    int length;
    scanf("%d",&length);    

    char result[length + 1];
    srand(time(NULL));
 
    rand_text(length, result);
    printf("%s", result);
}

cho em hỏi sao khi chạy cái này nhập 170 mà nó ra tùy lúc ít hơn hay đúng 170 ký tự vậy ạ, có cách nào sửa ko ạ

Bạn thử nhập số cỡ 10, 13 thử xem, sau khi nó hiện ra vài lần thì bạn thấy mẫu chung của nó là gì? Có lẽ do vòng lặp hoặc mảng của bạn bị thiếu mất một trường hợp chăng? Cẩn thận trong lập trình, luôn nhớ “toán học bắt đầu bằng zero”, các ngôn ngữ lập trình cũng hay bắt đầu với zero. Điều này khác với cách con người khi đếm thường bắt đầu bằng 1, ai mới học lập trình cũng hay dính vào vụ này.

2 Likes
  1. Charset này bị dư &quot rồi, chắc copy ở đâu rồi không nhìn kỹ đúng không?

Cái này sẽ trả về kích thước của string KỂ CẢ phần tử cuối cùng là \0
Nói cách khác, sizeof("123") = 4
Do đó khi bạn random có xác suất ra result[i] = '\0'.
Cách sửa:

result[i] = char_set[rand() % (sizeof(char_set)-1)];
4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?