Soru
Açık kullanıcıya bir dosyanın adını soran bir C programı yazın klavye girişi ile dosya alır kullanarak dosya dizini girmesini alarak bir dosya açma (isim içerebilir dizin yolunu da) ve dosyayı açmaya çalışır. Program, “File open!” Veya “Dosyayı açarken hata” mesajını görüntüler (program dosyayı okumaz, sadece 'u açmaya çalışır). Kullanıcının girdisini almak için gets() öğesini kullanın()
Bu yüzden aşağıdaki kodu kullanarak bir dosya dizini yolunu okumaya çalıştım ve bu dosya dizin yolunu fopen() içine kopyalayıp dosyanın açılıp açılmayacağını doğruladım. Dosya dizin yolu, kullanıcı tarafından gets() kullanılarak girilir.
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char directory[100];
printf("Please enter the directory path of the file you wish to open.\n");
gets(directory);
fp = fopen("%s,directory","r");
if(fp==NULL)
{
printf("\nCannot open file.");
}
else
{
printf("\nFile open!");
}
return 0;
}
MY SORUN
olursa olsun çalışmıyor ve ben oluşturdum ve işleri biliyorum diğer programlardan doğrudan dosya dizin yollarını kopyaladıktan ben ne koymak. Herhangi bir fikir?
Bkz. [Neden "gets()" kullanımı tehlikeli?) (Http://stackoverflow.com/questions/1694036/why-is-the-gets-function-dangerous-why-should-it-not ol-kullanılır). Ve öğreticisine 'gets()' kullanan bir ödev yazmak için söyleyin - asla kullanılmamalıdır. –
Kullanıcı tarafından girilen dizin adını 'fopen() '- printf()' den oldukça farklı bir şekilde göstermeniz gerekir; ancak bu, notasyonları karıştırmaya çalışıyormuş gibi görünür. Kullanın: 'fp = fopen (dizin," r "):' eğer verilen isim bir dizin ise, yine de başarısız olacaktır, ancak bir dosya ise çalışacaktır. Ayrıca, iletiyi yeni satır ile başlatmak yerine (veya bazen de) yeni bir satır ile iletileri sonlandırmak iyi bir fikirdir. –
Jonathan Leffler'in söylediği ikinci. Asla 'gets' kullanmayın, hiçbir koşulda. (Sesi kesmek için üzgünüm ama bu önemli.) –