我想知道爲什麼下面的代碼行爲如下。我第一次打印變量「account_name」它可以正常工作。第二次和第三次,它根本不起作用,而是打印亂碼。我在C.C函數輸入字符串
const char * get_account_name(){
char loc_account_name[255];
printf ("Please enter the ledger Account name: ");
scanf ("%[^\n]", &loc_account_name);
fflush(stdin);
printf ("\n");
return (loc_account_name);
}
void main (void)
{
/* Declare variables. We use the predefined "MAX_ENTRIES" definition to define how large the arrays will be */
float credits[MAX_ENTRIES], debits [MAX_ENTRIES], starting_balance, ending_balance;
int debit_amount, credit_amount, x;
char * account_name;
printf ("Welcome to the Sears Ledger System\n\n");
/* Prompt the user to enter the name of the account, we allow for up to 255 characters and account for names with spaces as well */
account_name = get_account_name();
printf("%s",account_name);
printf("%s",account_name);
printf("%s",account_name);
} /* end main*/
*更新
初學者我已刪除的get_account_name功能的scanf函數的符號。然後我發現它會不止一次地打印出正確的值,但是程序會在那之後永遠掛起。不幸的是,我被迫使用的編譯器沒有調試器,所以我仍然對發生的事情感到困惑。
char * get_account_name(){
char * loc_account_name;
printf ("Please enter the ledger Account name: ");
scanf ("%[^\n]", loc_account_name);
fflush(stdin);
printf ("\n");
return loc_account_name;
}
* *更新2
char *get_account_name() {
char loc_account_name[255];
char *r;
printf ("Please enter the ledger Account name: ");
scanf ("%[^\n]", &loc_account_name);
fflush(stdin);
printf("%s\n", loc_account_name);
*r = malloc(strlen(loc_account_name) + 1);
strcpy(r, loc_account_name);
return r;
}
void main (void)
{
char * account_name;
/* Prompt the user to enter the name of the account, we allow for up to 255 characters and account for names with spaces as well */
account_name = get_account_name();
printf("%s\n", account_name);
printf("%s\n", account_name);
printf("%s\n", account_name);
free(account_name);
} /* end main*/
'scanf(「%[^ \ n]」,...)'這是否工作? – Ashe 2012-07-16 02:14:23
是的,迄今爲止我已經工作 – user1527739 2012-07-16 02:57:39