2016-03-20 17 views
0

Daha sonra bir dizide saklanan iki katmanda okuyan C dilinde bir işlev oluşturmaya çalışıyorum. Dizinin büyüklüğünü geri döndürmek istiyorum, böylece onu ana olarak kullanabilirim. Dolayısıyla, bu işlevin amacı kullanıcının bir diziye değer girmesini ve döngüyü sonlandırmak için^d (ctrl + d) veya EOF yazmasını istemektir.C Programlama: Dizinin büyüklüğünü döndürmek için işlev kullanmak

#include <stdio.h> 

//Prototype Declaration 
int getdata(double[], int); 

int main(int argc, char* argv[]) { 
double array[20]; 
int count = 0, max = 20; 

//Calls the getdata function 
count = getdata(array, max); 
printf("%s%lf%s","Array1: " ,array[1], "\n"); 
printf("%s%d%s", "Count is: ", count, "\n"); 
return 0; 
} 

----- ------- (Ben bu farklı dosyalarda böylece modülleri bağlama ediyorum)

ne olur
#include <stdio.h> 

//Define getdata.c 
int getdata(double values[], int limit){ 
printf("%s","Please enter your values into the array.\n"); 
int count = 0; 
double n; 
while ((count < limit) && (scanf("%lf",&n) != EOF)) { 
    values[count] = n; 
    count++; 
} 
return count; 
} 

olsa da, ben bölerseniz olmasıdır Döngü erken, dizi değerleri iyi geçirir, ancak sayısı sadece çıktısını alacaktı. Programın, boş indekslerin geri kalanında otomatik olarak bir şeyle dolduğunu ve EOF yazdıktan sonra sayım değerini artırmaya devam ettiğimi varsayıyorum. Programın girilen değerler miktarını doğru şekilde alabilmesi için ne yapabilirim? Çok fazla C kodlamıyorum. Çoğunlukla C++ çalışmamı yapıyorum. Referans olarak geçerek aşina olduğumu bildiğim halde, ancak

+3

Ne döndüğünü görmek için 'scanf' belgesini gözden geçirin –

+1

'getdata()' bildiriminin, hem main() 'hem de tanımlayan dosyada yer alan dosyada yer alan bir başlık içinde olması gerektiğini unutmayın. GetData() '. Bu şekilde, başlık dosyası, her iki kaynak dosyasının da getdata() 'nın doğru beyanı/tanımı üzerinde hemfikir olduğunu kontrol eden bir yapıştırıcı görevi görür. –

+0

Bu kod düzgün çalışıyor: 'echo 3 4 5 | ana baskılar Sayısı: 3'. –

cevap

2

scanf()'un dönüştürülemeyen girişi yutmaması gerektiğini bilmelisiniz. Eğer bir problem varsa, o zaman (arızalı) girişi, akımın bir sonraki yinelemesine dönüştürmeyi başaramamanız için akışta bırakır. Bu yüzden tekrar tekrar aynı geçersiz şeyi çift olarak eşleştirmeye çalışıyor.

Ben scanf(), ya da (bu durumda 1 olan) Eğer alanların sayısı beklenenden okuma var sağlamak için scanf() dönüş değerini kontrol edin (en azından) kullanmaktan daha iyi bir çözüm olarak fgets() artı sscanf() kullanmanızı öneririz. Bahse girerim EOF yerine 0 döndürüyor, bu yüzden döngünüz countlimit ile eşleşene kadar devam ediyor.

İlgili konular