gets()函式不能用

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

struct note{

char sentence[31];

int assign;

struct note *next;

};

typedef struct note Note;

typedef Note *Noteptr;Noteptr recommend[21];

int main(void){

recommend[1]=(Noteptr)malloc(sizeof(Note));

recommend[2]=(Noteptr)malloc(sizeof(Note));

recommend[3]=(Noteptr)malloc(sizeof(Note));

for(int i=1;i<=3;i++){

recommend[i]->next=NULL;

strcpy(recommend[i]->sentence,"no any recommend");

}

printf("請使用者輸入想推薦的商品編號\n");

int assignnumber;

scanf("%d",&assignnumber);

printf("請輸入欲推薦的留言\n");

gets(recommend[assignnumber]->sentence);

printf("你剛剛輸入的是:\n");

printf("%s\n推薦成功\n",recommend[assignnumber]->sentence);

printf("recommend[%d]->sentence=%s\n",assignnumber,recommend[assignnumber]->sentence);

return 0;

}

我輸入商品編號(3)後,系統印出

請輸入欲推薦的留言

你剛剛輸入的是:

推薦成功

recommend[3]->sentence=

連"no any recommend"都沒印出來

為什麼會這樣?

1 個解答

評分
  • 9 年前
    最佳解答

    scanf("%d",&assignnumber);

    這一行使用者輸入一個數字,然後按下enter,

    將數字讀進來之後,後面還留著一個換行符號

    所以接下來gets(),會讀到這個換行後停止,下一行你真正想吃進來的句子,還沒有吃到。

    最簡單的方法就是前面多做一個gets,

    scanf("%d",&assignnumber);

    printf("請輸入欲推薦的留言\n");

    gets(aBuffer);

    gets(recommend[assignnumber]->sentence);

    像這個樣子

還有問題?馬上發問,尋求解答。