Şehirler arasında bir iletişim ağı oluşturmak için giriş verisi sağlayan bir metin dosyam var.2 satırlık C öğesini metin dosyasından doldurun
N=12
C=[72,107,65,99,20,11,31,7,42,28,4, 31,10,57,37,71,18,17,73,39,14, 91,77,19,39,33,59,31,44,98, 71,66,36,23,10,100,93,41, 21,80,22,43,78,22,93, 77,81,49,62,89,19, 21,19,51,40,18, 102,92,28,51, 31,47,51, 73,38, 50]
R=[0.81,0.88,0.83,0.90,0.98,0.93,0.86,0.91,0.92,0.86,0.80, 0.91,0.87,0.78,0.83,0.90,0.93,0.87,0.79,0.99,0.94, 0.88,0.98,0.97,0.96,0.92,0.81,0.99,0.92,0.91, 0.80,0.88,0.87,0.93,0.90,0.99,0.98,0.91, 0.89,0.80,0.92,0.93,0.83,0.87,0.99, 0.97,0.91,0.89,0.99,0.94,0.90, 0.87,0.89,0.95,0.85,0.96, 0.99,0.79,0.88,0.81, 0.84,0.97,0.77, 0.83,0.93, 0.99]
a_b=1
Req_Reliability = 0.5
Req_Cost = 267
: N ağ şehirlerin sayısı olan ve Cı & R sırasıyla maliyet ve iki şehir arasında bir bağlantı uygulanması güvenilirlik veren N matrisi simetrik K. 2'nin üzerinde bir tamsayı olduğu sürece, 2 0'ın üzerinde değişiklik gösterebilir. C & R de buna göre değişecektir..
Metin dosyasından, matrisler simetrik olduğundan, matrislerin yalnızca üst yarısı verilir ve indeksler i = j olan tüm öğeler 0 olmalıdır, böylece metin dosyasındaki C matrisinin biçimi şu şekilde olur:
C=[C(1-2),C(1-3),...,C(1-12),whitespaceC(2-3),C(2-4),...,C(2-12),...,whitespaceC(11-12)]
with C(IDstartCity-IDstopCity)
metin dosyasında boşluk bir alt satıra bir değişiklik gösterir ve aynı yapı ne yapmak istiyorum benim C programında kendi maça her değişkeni atamak olan R.
matrix için de geçerlidir. 12'den N'ye nasıl atanacağına dair bir fikrim olsa da, C ve R matrislerinin tuhaf yapılandırmasını metin dosyasından C programındakilere nasıl atayabildiğim konusunda clueless.
int main(int argc, const char * argv[]) {
FILE *finput;
char var_name[5];
int value = 0;
finput = fopen("Prj1_input.txt", "r");
//Inputs Start
int N; //Number of cities
//Cost Array
int **C = malloc(N * sizeof(int*));
for (i = 0; i < N; i++) {
C[i] = malloc(N * sizeof(int));
memset(C[i], 0, N * sizeof(int));
}
//Reliability Array
double **R = malloc(N * sizeof(double*));
for (i = 0; i < N; i++) {
R[i] = malloc(N * sizeof(double));
memset(R[i], 0, N * sizeof(double));
}
int con_cost; //Connection cost between 2 cities
double con_reliability; //Connection reliability between 2 cities
int a_b; //0 is type a, 1 is type b
double Req_reliability, Req_cost; //reliability for type a, cost for type b
//Inputs Stop
fscanf(finput, "%c=%d", var_name, &value);
printf("%s %d\n", var_name, value);
fclose(finput);
return 0;
}
Ben iki ben metin dosyasında bir boşluk bulmak-döngüler için ben satır artırmaz kullanabilirsiniz varsayalım, ama ben metin dosyasına nasıl başa kesinlikle hiçbir fikrim yok. Ben // girdi başlangıç ve // giriş durağı arasındaki herşeyi kapatmaktır sağlanan Şimdilik
, çıkış N 12
Teşekkür
örnek olarak
'int N; çift C [N] [N], R [N] [N]; C cinsinden yasal değildir. C'deki bir dizinin boyutunu belirtmek için değişkenleri kullanamazsınız. stdlib'de bulunan işlevde yerleşik olan "malloc" dosyasına bakın. .h' dizileri dinamik olarak tahsis etmek için – JackVanier
Teşekkürler, onlar daha çok yer tutucuydu, ben giriş metin dosyası okuma ile başa çıkmak için daha fazla ilgileniyorum. (Soruyu düzenleyeceğim) – darkf222
metin dosyasının içeriğini olduğu gibi göster. Bu nasıl ayrıştırılacağını yönlendirecek. – ryyker