iT邦幫忙

0

輸入多個字串問題 (C)

char *S_i[n];
int e_i[n];

for(i=0;i<n;i++){
	scanf("%s %d",&S_i[i],&e_i[i]);
}

上面是想輸入幾個字串,但之後用下面的
for(i=0;i<n;i++){
if(e_i[i]==3)
printf("%s %d",S_i[i],e_i[i]);
printf("\n");
}
卻沒辦法成功輸出,輸出指令應該是沒錯(嗎?),問題是不太知道要如何輸入
其他變數和程式都沒有漏,沒問題
網上找的都是在宣告變數的時候已經設定字串内容
請問一下怎樣才能在scanf輸入多個字串
謝謝

1
lagagain
iT邦新手 3 級 ‧ 2021-10-26 00:00:32
最佳解答
char *S_i[n];
int e_i[n];

for(i=0;i<n;i++){
	scanf("%s %d",&S_i[i],&e_i[i]);
}

儲存字串的地方沒有做記憶體分配...scanf給的位置也不是正常的。

真的要得話scanf應該也是這樣寫

// scanf("%s %d",&S_i[i],&e_i[i]);
   scanf("%s %d",S_i[i],&e_i[i]);

甚至如果理解scanf的運作的話(沒做flush的話stdin還是有字元在),還可以這樣寫:

scanf("%s", S_i[i]);
scanf("%d", &e_i[i]);

甚至更好的處理方式應該會類似(假定buffer size爲5):

scanf("%4s", S_i[i]);
scanf("%d", &e_i[i]);

所以:

#define n 3

char S_i[n][5] = {"aaaa", "bbbb", "cccc"};  // 初始化buffers
int e_i[n];
  
for(int i=0;i<n;i++){
  //scanf("%s %d",&S_i[i],&e_i[i]);
  scanf("%4s", S_i[i]); // get string, or use `fgets`
  scanf("%d", &e_i[i]); // get integer
}

input:

aaaa 3
bbb 3
cc 3

去做mallocremalloc會彈性,但要記得free。忘記的話還蠻危險的。

lagagain iT邦新手 3 級 ‧ 2021-10-26 00:06:03 檢舉

先取得整行字串再去做解析也是一種方式

1
一級屠豬士
iT邦大師 1 級 ‧ 2021-10-25 23:24:12

又是開學一陣子了....

https://stackoverflow.com/questions/1412513/getting-multiple-values-with-scanf

你有一行

if(e_i[i]==3)

先不要用這行.

3
海綿寶寶
iT邦大神 1 級 ‧ 2021-10-26 08:53:12

你運氣真好
七年前就有人問過相同的問題
也有人提供正解

我要發表回答

立即登入回答