[問題] sscanf
最近在寫一個程式,其中需要做下面的工作,
主要是將某個檔案內依特定格式儲存的資料
每一欄的資料分別存放至4個變數或陣列中,
最後輸出至螢幕
舉例來說,輸入檔的內容為:
John 4 Mary 5
Harry 8 Jason 21
那麼程式當中則分別用str1, a, str2, b四個變數來存放每一欄的資料
(即第一行中str1="John", a=4, str2="Mary", b=5,
第二行中str1="Harry", a=8, str2="Jason", b=21)
所以第一個就想到用sscanf做
以下是簡化過的程式碼:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void){
int i;
int count=0;
char input[30];
char str1[5], str2[5];
int a,b;
while(fgets(input,25,stdin)!=NULL){
input[strlen(input)-1]='\0';
sscanf(input,"%s %d %s %d", str1, &a, str2, &b);
printf("str1=%s a=%d str2=%s b=%d\n", str1, a, str2, b);
count++;
}
return 0;
}
之所以要把每一行的'\n'改為'\0'是為了往後程式的需要。
但輸出的結果卻是:
str1=John a=3 str2=Mary b=4
str1= a=8 str2=jason b=21
之後將str1的長度加大就沒問題了,
但還是想瞭解一下為什麼長度剛好的時候沒辦法抓到值呢? 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.70.109.48
※ 編輯: subeyes 來自: 203.70.109.48 (06/18 18:48)
推
06/18 18:49, , 1F
06/18 18:49, 1F
→
06/18 21:25, , 2F
06/18 21:25, 2F
推
06/18 22:19, , 3F
06/18 22:19, 3F
→
06/18 23:07, , 4F
06/18 23:07, 4F
→
06/18 23:08, , 5F
06/18 23:08, 5F
→
06/18 23:08, , 6F
06/18 23:08, 6F
推
06/18 23:26, , 7F
06/18 23:26, 7F
→
06/18 23:27, , 8F
06/18 23:27, 8F
→
06/18 23:27, , 9F
06/18 23:27, 9F
→
06/18 23:28, , 10F
06/18 23:28, 10F
→
06/18 23:30, , 11F
06/18 23:30, 11F
推
06/18 23:30, , 12F
06/18 23:30, 12F
→
06/18 23:31, , 13F
06/18 23:31, 13F
→
06/18 23:32, , 14F
06/18 23:32, 14F
→
06/18 23:32, , 15F
06/18 23:32, 15F
→
06/18 23:34, , 16F
06/18 23:34, 16F
推
06/18 23:36, , 17F
06/18 23:36, 17F
討論串 (同標題文章)