Printf仅采用最后一次扫描

时间:2017-11-01 14:41:17

标签: c

我这里有这个代码:

int main() {
char cognome[] = {};
char nome[] = {} ;
char sesso[] = {};
char giorno_n[] = {};
char mese_n[] = {};
char anno_n[] = {};
char comune[] = {};
char lettera[] = {};
int i;


printf("Programma che calcola il codice fiscale.\n");
printf("Inserisci il cognome: ");
scanf("%s", cognome);
strupr(cognome);
printf("Inserisci il nome: ");
scanf("%s", nome);
strupr(nome);
printf("Inserisci il sesso: ");
scanf("%s", sesso);
strupr(sesso);
printf("Inserisci il giorno di nascita: ");
scanf("%s", giorno_n);
printf("Inserisci il mese di nascita: ");
scanf("%s", mese_n);
printf("Inserisci l'anno di nascita: ");
scanf("%s", anno_n);
printf("Inserisci il comune di nascita: ");
scanf("%s", comune);
printf("Il comune è: %s", comune);

printf("%s", cognome);


getch();


}`

此代码存在的问题是,上一个printf("%s", cognome)没有获取scanf("%s", cognome)的输入值,但是它取了最后scanf("%s", comune)的值,我真的不喜欢不明白为什么。

1 个答案:

答案 0 :(得分:2)

您需要为每个字符串指定最大长度。

例如:

char cognome[30];   // maximum lenght of cognome is 30-1 (1 for the NUL terminator)
char nome[30];      // etc.

然后像这样拨打scanf

scanf("%29s", cognome);

如果用户输入的名称超过29个字符,则无法获得缓冲区溢出。