0
我有一個結構定義如下將字符串分割爲
struct gtid{
int id1;
int id2;
int num;
}
一個結構的元件如何可以將字符串轉換的形式爲「1-2-3」和初始化結構相應地是
gtid -> id1 = 1;
gtid -> id2 = 2;
gtid -> num = 3;
或者我該如何將字符串轉換爲適當的結構體。
我有一個結構定義如下將字符串分割爲
struct gtid{
int id1;
int id2;
int num;
}
一個結構的元件如何可以將字符串轉換的形式爲「1-2-3」和初始化結構相應地是
gtid -> id1 = 1;
gtid -> id2 = 2;
gtid -> num = 3;
或者我該如何將字符串轉換爲適當的結構體。
您可以從stdin
使用scanf
函數讀取格式化值,並從sscanf
函數使用字符串讀取格式值。請參閱下面的完整示例。
#include <stdio.h>
typedef struct {
int id1;
int id2;
int num;
} gtid_t;
int main(void) {
gtid_t gtid;
// read from stdin
scanf("%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num));
printf("id1 = %d, id2 = %d, num = %d\n", gtid.id1, gtid.id2, gtid.num);
// read from string
char* str = "4-5-6";
sscanf(str, "%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num));
printf("id1 = %d, id2 = %d, num = %d\n", gtid.id1, gtid.id2, gtid.num);
return 0;
}
輸出將如下
id1 = 1, id2 = 2, num = 3
id1 = 4, id2 = 5, num = 6
正如@ DavidC.Rankin提意見,最好是檢查輸入成功。你可以添加if
聲明這樣一個
if(sscanf(str, "%d-%d-%d", &(gtid.id1), &(gtid.id2), &(gtid.num)) != 3) {
fprintf(stderr, "Invalid input: %s\n", str);
}
至於結果爲str
價值4-a-6
這個例子顯示錯誤
Invalid input: 4-a-6
謝謝,對不起,但我不希望從標準輸入讀取它。該字符串已被定義爲char * str。首先,我需要檢查字符串的格式是否正確,然後將其轉換。 –
@RebeccaTucker我的答案已經有'stdin'的兩個例子,並且字符串被定義爲'char *'。 – NikolayKondratyev
哦,謝謝。這有幫助。請你認爲有必要在轉換之前檢查字符串是否具有正確的x-y-z格式?我也很樂意這樣做。我在星期一開始學習如何編碼。祝我好運 !! –