看板 C_and_CPP 關於我們 聯絡資訊
#include<stdio.h> #include<string.h> int main() { char input[80]={'\0'},origin[80]={'\0'},tmp[80]={'\0'}; char *token; while(fgets(input,80,stdin)) { strcpy(origin,input); strtok(origin,"\n"); token=strtok(input," "); token=strtok(NULL," \n"); if(strncmp("RSUB",token,4)==0) strcpy(tmp," 4C0000"); printf("%s%s\n",origin,tmp); } return 0; } ================================================ 我用a.out<fin.txt的方式輸入 fin.txt的內容如下 ================================================ 1000 RSUB 1000 RSUB 1000 RSUB 1000 RSUB ================================================ 我預期的結果應該是 1000 RSUB 4C0000 1000 RSUB 4C0000 1000 RSUB 4C0000 1000 RSUB 4C0000 ================================================ 可是跑出來的結果卻是 4C0000UB 4C0000UB 4C0000UB 4C0000UB (每一行前面的1000 RS都被4C0000覆蓋掉了) 我用a.out<fin.txt來輸入就會出現這個問題 可是如果我用複製貼上來輸入就不會有這個問題 為什麼會這樣啊 我找不出哪裡有問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.119.135.80
qazq:因為 origin 中為 "1000 RSUB\r\n" 你只把 \n 拿掉。 06/15 09:24
whitefur:請問\r是…? 06/15 16:19
whitefur:為何會出現\r呢 06/15 16:29
VictorTom:Windows系統的換行就是\r\n, 分別表示return與new line 06/15 18:14
VictorTom:\n\r還是\r\n啊!?記不清楚了, 總之就是txt的換行在MSwin 06/15 18:15
VictorTom:下就是用了這兩個byte來完成; \r會列頭, \n下移新行; 06/15 18:16
VictorTom:印像中大概就是這樣; 不過print的時候\n就行了.... 06/15 18:16