30/09/2018, 17:06

[C]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!
Congrats!
");
  }
  else
    {
        printf("Try again

");
        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,".
Your 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?
");
      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 ạ?

Duc Duy viết 19:10 ngày 30/09/2018

ai giúp em với

Minh Hoàng viết 19:11 ngày 30/09/2018

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

Cho em hỏi sao lúc in ra màn hình console, nó không ghi tên em, nó chỉ ghi tên xong bỏ luôn phần em mới điền vào cụ thể: em điền 14 9 long gioi a ra màn hình console cái printf cuối nó ghi:ban 14, lop 9, ten , hoc luc gioi, thich chu a #include <stdio.h> #include <stdlib.h> int main() { int tuoi, lop; char ten[10]; char hocluc[4]; char kytu; printf("ban bao nhieu tuoi, lop may, ten gi, hoc luc gi, thich chu gi"); scanf("%d %d", &tuoi, &lop); scanf("%s", ten); …

Bài liên quan
0