所以我想建立一個簡單的程序來輸入使用結構的數據。結構陣列;輸入多個字符串
我原來的計劃是這樣的:
#include <stdio.h>
#include <stdlib.h>
struct student {
int num;
char name[20];
};
int main()
{
int size, i;
scanf("%d", &size);
struct student s[size];
for(i=0; i < size; i++){
scanf("%d", &s[i].num);
scanf("%s", &s[i].name);
}
for(i=0; i < size; i++){
printf("no.:%d\n", s[i].num);
printf("name:%s\n", s[i].name);
}
return 0;
}
我的測試輸入是:
2
1 Name1
2 Name2
這是工作,但只有當輸入正確的數據。 但是當我嘗試在我的結構中使用更多的字符串時,它開始變得混亂。例如這樣的事情是行不通的:
#include <stdio.h>
#include <stdlib.h>
struct student {
int num;
char name[20];
char gender;
char address[20];
};
int main()
{
int size, i, j;
scanf("%d", &size);
struct student s[size];
for(i=0; i < size; i++){
scanf("%d", &s[i].num);
scanf("%s", s[i].name);
scanf("%s", s[i].gender);
scanf("%s", s[i].address);
}
for(i=0; i < size; i++){
printf("no.:%d\n", s[i].num);
printf("name:%s\n", s[i].name);
printf("gender:%s\n", s[i].gender);
printf("address:%s\n", s[i].address);
}
return 0;
}
我明白,所以我試圖用的getchar這個問題必須躺在scanf函數的使用字符串輸入()。我認爲這樣的事情可能會奏效。
for(i=0; i < size; i++){
int j=0;
while((s[i].name[j]=getchar()) != ' ');
j++;
s[i].name[j] = '\0';
}
雖然它不工作。在這一點上,我感到困惑,我不確定有什麼問題。我的意思是我想輸入的東西,如:使用結構
1001傑夫中號No.2_road_city
,但我感到困惑應該如何準確完成。
啓用警告是第一個步驟之前,請在計算器'的scanf( 「%s」 時,與S [I] scanf(「%s」,&s [i] .gender);'='scanf(「%s」,s [i] .name);'...和其他微不足道的錯誤。 >'scanf(「%c」,&s [i] .ge nder);'etc – Stargateur
檢查每個'scanf()'調用以確保它返回正確的數字(每次讀取一個字段時爲1)。如果它不返回1,則說明你有問題。將N個呼叫合併爲一個可能會更好 - 您可以這樣做。用['fgets()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html)或POSIX ['getline()'](http:/ /pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html),然後用'sscanf()'處理該行。 –