2012-09-02 23 views
1

運行過程中一個特殊的字符串在我的C代碼,我給出以下字符串作爲輸入:輸入用C

"c:\tc\bin\a c j k.jpg" 

我試圖讀取與scanf函數的輸入,但它失敗(通過輸入帶或不帶引號),我正在尋找其他解決方案。

我的代碼如下:

char keytext[16],zzz,source[100],dest[100]; 
short int a; 
size_t readcount; 

clrscr(); 
printf("input the key text(max 16 characters):"); 
scanf("%s",&keytext); 

printf("input file name:"); 
scanf("%s",&source); 

/*fgets(source,100,stdin); 
namelen=strlen(source); 
if(source[namelen-1]=='\n') 
source[namelen-1]='\0';*/ 

printf("output file name:"); 
scanf("%s",&dest); 
+0

是否將'C:\ tc \ bin \ a c j k.jpg'視爲單個字符串? – hmjd

+0

你能給我們更詳細的解釋嗎? – fasked

+0

@hmjd是的,我要去讀那個文件的內容 – user1026137

回答

1

格式說明%s將停止食用輸入遇到的第一個空格字符的時候,所以它只會讀,直到C:\tc\bin\a末。要閱讀到k.jpg您可以使用掃描集:

char input[128]; 
if (1 == scanf("%127[^\n]", input)) 
{ 
} 

格式說明"%127[^\n]"手段讀取直到下一個換行符,但不超過127個字符,以防止緩衝區溢出。在使用其輸出之前,您應該檢查返回值scanf(),它會返回所做的分配數量。

+0

字符\ t和\ b和\ a在那個字符串裏怎麼樣 – user1026137

+0

不是字符串文字的一部分,它們是輸入的,被複制到'input'數組中。 – hmjd

+0

對不起,它不起作用 – user1026137

0

scanf函數%s specificator期望字符指針char *。但是您將指針傳遞給char char **的指針。 爲了解決它使用下面的代碼來代替:

scanf("%s", keytext); 
scanf("%s", source); 
scanf("%s", dest); 

注意,它不需要&符號。 如果要使用空格讀取整個字符串,可以使用fgets函數。

fgets(keytext, sizeof(keytext), stdin); 
fgets(source, sizeof(source), stdin); 
fgets(dest, sizeof(dest), stdin); 
+0

但是這不能解決用白色空間掃描的OP問題。 – Rohan

+0

@fasked如果我在使用scanf進行第一次輸入之後使用fgets,它將無法工作。 – user1026137

+0

@ user1026137我找到了你!在使用'scanf'流後保留'\ n'符號。您需要清除流。在'fgets'之前嘗試'scanf(「%* [^ \ n]」)'。 – fasked