2013-10-20 36 views
0

我還在學習,所以如果我正在做點什麼真的是效率低下,告訴我。否則,我更關心爲什麼這不起作用。用C寫一個待辦事項列表。有很多問題

除非我使用引文,否則我無法寫出多個單詞。有沒有一種方法可以讓我在寫入多個單詞時不必添加引號?

#include<stdio.h> 
#include<stdlib.h> 
main() { 

    char str[BUFSIZ]; 
    FILE *f; 
    f = fopen(".todo","a"); 

    printf("\n\nTODO list\n\n"); 
     printf("~ "); 
     scanf("%s", str); 
     fprintf(f,str); 
     fprintf(f,"\n"); 
     fclose(f); 
} 

我確實做了一個循環,所以我可以寫多個東西。這是我做的:

for(;;) { 
    printf("~ "); 
    scanf("%s", str); 
    if(str == "break") { 
     fclose(f); 
     printf("\n"); 
     exit(1); 
    } 
    fprintf(f,str); 
} 

但是,如果我輸入「break」,它不會退出。它不會寫入.todo(我認爲這是因爲fclose沒有運行)如果不是那樣,我該如何讓它退出?

+0

如果您正在讀取字符串,不要使用scanf從鍵盤讀取,而是使用fgets代替(例如char buffer [128]; fgets(buffer,sizeof(buffer),stdin)),只刪除最後一個字符(\ n) –

+0

Don不會將非文字字符串傳遞給printf函數族的格式參數。 –

回答

0

你可以只比較了一些預定義的值的字符串說「破發」。因此,當用戶進入休息,你可以使用STRCMP跳出循環

for(;;) { 
    printf("~ "); 
    scanf("%s", str); 
    if(strcmp(str,"break")==0) { 
    fclose(f); 
    printf("\n"); 
    break; 
    } 
    fprintf(f,str); 
} 

另一種方法是使用fgetsgetch()getchar()檢查空白行或只是enter作爲輸入,並打破了

+0

是的,謝謝。然而;我仍然有不能寫出多個單詞的問題。你知道我怎麼能寫多個詞,而不必使用報價? – laxantsu

+0

@ user2888419:是使用[fgets()](http://www.cplusplus.com/reference/cstdio/fgets/)來存儲多個單詞,它也可以使用scanf使用scanf(「%[^ \ t \ n]的」,STR); – hrv

+0

有另一個問題。我正在使用'fgets(str,256,stdin)'。但是,當我輸入'break'時它不會中斷。其他的都是一樣的。你知道可能是什麼問題嗎? – laxantsu