2011-07-07 15 views
1

我知道這對大多數人來說可能會非常簡單,但我是新手,所以請不要介意我。我想通過在c程序的printf/scanf行中使用它的名字來將變量賦值給另一個值。下面的代碼:指定一個變量值到另一個

int day, month, counter; 
int sunday = 0; 
int monday = 1; 
int tuesday = 2; 
int wednesday = 3; 
int thursday = 4; 
int friday = 5; 
int saturday = 6; 

printf("Enter how many days in the month:\n"); 
scanf("%i", &month); 

printf("Enter what day the month starts on:\n"); 
scanf("%i", &day); 

這只是其中的一部分,但我想要做的就是這樣,當用戶在第二個printf/scanf的線路輸入的實際天數名稱,它會調用int的值並將其分配給天數值。問題是它沒有工作,我不知道爲什麼。

+3

什麼不工作? – Constantinius

+0

輸入「實際日期名稱」是什麼意思。如果你正在說用戶輸入「星期日,星期一」等,那麼你爲什麼要將它存儲在「int」中。 – Balanivash

+0

我想他想在命令行中輸入變量名稱,然後使用存儲在其他地方變量中的int。聽起來像他應該使用枚舉... –

回答

2

你不能用C做到這一點(從進入時scanf運行鍵盤變量的名字),這是不是一種腳本語言。基本上,所有變量的名稱在編譯步驟中都會丟失(它們仍然可以保存爲調試信息,調試程序使用它,例如gdb,但程序通常在運行時不使用它)。

你應該經由scanf輸入的字符串(字符數組與char*型或char [])與%s,然後用手,例如解析它

char string[50]; 
scanf("%s", string); 
if(strcmp(string, "monday") == 0) 
    day = 1; 
else if (strcmp(string, "tuesday") == 0) 
    day = 2; 

等等。

+0

我想這回答了我的問題。就像我說的,我是新來的,所以謝謝你不要打我吧=)。 – andrew

+2

任何人在某個時間都處於相同的情況:) – osgx

+2

他已經在句子中使用「bash」了......這支部隊很強大。 –

1

您將需要編寫一個函數或一組函數來呈現使用它的程序的單個接口,它將掃描程序已讀取的字符串(非整數),並將其轉換爲適當的值。您應該使代碼不區分大小寫,並且能夠接受有效(唯一)縮寫(如Sa,Su,M,Tu,W,Th,F)等。您可能會或可能不會接受星期幾數字作爲名稱的替代品。如果您不得不擔心國際化或I18N(S,D,L,J,Ma,Me,V爲Samedi,Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi用法語等),這會增加這些功能的複雜性(但不涉及使用它們的代碼的複雜性)。

C沒有提供這樣做的直接方式。最近的方法是POSIX strptime(),我不認爲它完全處理這個問題。

0

如果你做一個scanf將接受一個有符號的整數(%i),你不能只期望一個整數。如果用戶輸入一個字符串(比如星期日,所以你想讓那天得到'0'值),你必須以不同的方式來完成。

也許你可以要求用戶在輸入數據前插入格式(printf("Enter the format of day ('n' for name, 'd' for number:\n");然後根據用戶的選擇,你可以做一個不同的掃描f:如果我選擇'n',那麼你可以去查找相應的數值。

如果我可以建議你改進你的代碼,你必須聲明不同的日子或數組或結構或枚舉。

+0

「'n'表示姓名,'n'表示數字」不可能讓你得到你想要的。 –

+0

我的意思是'n'代表名字,'d'代表數字。現在我會糾正 – DonCallisto

2

對於初學者來說,類似的東西。

int day, month, counter; 
char *dofw[] = { "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", NULL}; 
char day_string[20]; 

printf("Enter how many days in the month:\n"); 
scanf("%d", &month); 

printf("Enter what day the month starts on:\n"); 
scanf("%20s", day_string); 

int i; 
day = -1; 
for(i=0; dofw[i]; i++) { 
    if(strcmp(day_string, dofw[i]) == 0) { 
    day = i; 
    break; 
    } 
} 
if(day == -1) 
    printf("User Y U not give good day\n"); 
相關問題