Không lưu được kết quả với hàm gets()

Đây là 1 bài code do em tự nghĩ ra: Tạo 1 user name, 1 password phải có ít nhất 1 chữ hoa, chữ thường và 1 số. Sau đó hỏi hometown và homestate (2 chữ cái đầu). Sau đó hỏi về số bộ phim đã xem được trong năm, chấm điểm theo thang từ 1 đến 10 và in ra kết quả rating cao nhất/ thấp nhất.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define SIZE 50
int main()
{
  int i;
  int hasDigit, hasUpper, hasLower;
  char user_name[SIZE];
  char password[SIZE];
  hasDigit=hasUpper=hasLower=0;
  puts("Enter your user name");
  scanf(" %s", user_name);
  START:puts("Enter your password (It must contains at least 1 digit, 1 Upper and lowercase):");
  scanf(" %s",password);
  for(i=0;i<strlen(password);i++)
  {
      if(isdigit(password[i])){
        hasDigit=1;
        continue;
      }
      if(isupper(password[i])){
        hasUpper=1;
        continue;
      }
      if(islower(password[i])){
        hasLower=1;
      }
  }
  if((hasDigit)&&(hasUpper)&&(hasLower)){
    printf("You have a perfect password!\nCongrats!\n");
  }
  else
    {
        printf("Try again\n\n");
        goto START;
    }
  char home_town[27];
  char home_state[3];
  char total[30]="";
  puts("Enter your hometown:");
  gets(home_town);
  puts("Enter your home state (Two abbreviations):");
  gets(home_state);
  strcat(total, home_town);
  strcat(total,".\nYour state is: ");
  strcat(total, home_state);
  puts("You live in ");
  puts(total);
  int num_movies;
  int rating;
  int highest=0;
  int lowest=10;
  char movie[SIZE];
  char high_movie[SIZE];
  char low_movie[SIZE];
  puts("How many movies have you watched this year?");
  scanf(" %d", &num_movies);
  for (i=0;i<num_movies;i++)
  {
      puts("What movie is it?\n");
      gets(movie);
      printf("From 1 to 10, what do you rank this movie: ");
      scanf(" %d", &rating);
      if (rating>highest){
        strcpy(high_movie, movie);
      }
      if (rating<lowest){
        strcpy(low_movie, movie);
      }
  }
  puts("The highest rating is:");
  puts(high_movie);
  puts("The lowest rating is:");
  puts(low_movie);
  return(0);
}

Nhưng khi em thử compile thì có vấn đề gì đấy giữa hàm puts/gets với printf/scanf. Em nghĩ là có vấn đề vì nó ko dừng lại ở “Enter your hometown” hay “What movie is it?” mà chạy thẳng đến câu lệnh tiếp theo.
Mọi người giải đáp giúp em với ạ. Thanks.
Btw, em đang học theo cuốn C programming, the absolute beginner’s guide và Head first C. Hai cuốn sách này tốt ko ạ?

1 Like

ai giúp em với :sweat:

bạn xem lệnh fflush(stdin) nhé :smile: xem về vấn đề buffer nữa

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