Son kullanma tarihi geçmiş, bayatlamış bir tarayıcı kullanıyorsanız, Mercedes kullanmak yerine tosbağaya binmek gibi... Web sitelerini düzgün görüntüleyemiyorsanız eh, bi' zahmet tarayıcınızı güncelleyiniz. Modern Web standartlarını karşılayan bir tarayıcı alternatifine göz atın.
fgets() veya eski gets() fonksiyonları kullanıcıdan veri alırken yeni satır karakterini (\n) da alır eğer kullanıcı sadece enter tuşuna basarsa bu yeni satır karakteri okuma işlemi olarak kabul edilir ve program alt satıra geçer.
Çözüm: Eğer sadece boş bir girdiyle karşılaşıyorsanız bu durumu kontrol edip işlem yapabilirsiniz ayrıca yeni satır karakterini temizlemek için şu kodu kullanabilirsiniz:
Eğer önceki bir input fonksiyonu stdin'i temizlemeden işlemi tamamladıysa örneğin scanf() kullanıldıysa fgets() fonksiyonu hemen bir yeni satır (\n) karakterini alabilir ve giriş işlemi sonlanabilir.
Çözüm: stdin'in temizlenmesi gerekebilir eğer önceki inputlardan kalan veriyi temizlemek istiyorsanız şunu ekleyebilirsiniz:
C:
while (getchar() != '\n');
fgets(listeisim, sizeof(listeisim), stdin);
Eğer hata hala devam ediyorsa kodun doğru şekilde çalışıp çalışmadığını görmek için çok basit bir giriş kontrolü ekleyebilirsiniz:
C:
#include <stdio.h>
int isimver() {
char listeisim[50];
printf("\nbir isim giriniz: ");
fgets(listeisim, sizeof(listeisim), stdin);
if (listeisim[0] == '\n') {
printf("Boş girdi alındı. Lütfen tekrar giriniz.\n");
} else {
printf("Listenizin yeni adi: %s", listeisim);
}
return 0;
}
int main() {
isimver();
return 0;
}
Bu kod eğer kullanıcı boş bir input yalnızca enter girerse bu durumu tespit edip ekrana hata mesajı verecektir.
Yukarıdaki kod, gets fonksiyonunu kullanarak kullanıcıdan veri almaya devam eder. Ancak, Visual Studio gibi modern derleyicilerde, gets fonksiyonu devre dışı bırakılabilir veya uyarı verebilir, çünkü güvenlik açısından önerilmez.
C:
#include <stdio.h>
int isimver()
{
char listeisim[50];
printf("\nbir isim giriniz: ");
fgets(listeisim, sizeof(listeisim), stdin); // Güvenli veri girişi
printf("listenizin yeni adi: %s", listeisim);
return 0;
}
int main() {
isimver(); // fonksiyonu çağırıyoruz
return 0;
}
Never use gets(). Because it is impossible to tell without knowing the data in advance how many characters gets() will read, and because gets() will continue to store characters past the end of the buffer, it is extremely dangerous to use. It has been used to break computer security. Use fgets() instead.
Asla gets() kullanma. Cunku gelecek veriyi onceden bilmeden gets()'in kac karakter okuyacagini bilemezsin, ve gets() buffer'in sonunu gectiginde bile karakterleri depolamaya devam edecek, kullanmak icin asiri tehlikeli. Bilgisayar guvenligini kirmak icin kullaniliyor. Yerine fgets() kullan.
// crt_gets_s.c
// This program retrieves a string from the stdin and
// prints the same string to the console.
#include <stdio.h>
int main( void )
{
char line[21]; // room for 20 chars + '\0'
gets_s( line, 20 );
printf( "The line entered was: %s\n", line );
}
gets fonksiyonu, güvenlik açısından riskler taşıdığı için modern C derleyicilerinde genellikle önerilmez ve bazı derleyicilerde kullanılmasına izin verilmez. Çünkü gets, kullanıcının girdiği verinin uzunluğunu kontrol etmez, bu da "buffer overflow" hatalarına yol açabilir. Bu yüzden, Visual Studio gibi modern derleyicilerde gets kullanmaya çalıştığınızda, kodunuzun düzgün çalışmaması veya hiç derlenmemesi ihtimali yüksek.
Yukarıdaki kod, gets fonksiyonunu kullanarak kullanıcıdan veri almaya devam eder. Ancak, Visual Studio gibi modern derleyicilerde, gets fonksiyonu devre dışı bırakılabilir veya uyarı verebilir, çünkü güvenlik açısından önerilmez.
C:
#include <stdio.h>
int isimver()
{
char listeisim[50];
printf("\nbir isim giriniz: ");
fgets(listeisim, sizeof(listeisim), stdin); // Güvenli veri girişi
printf("listenizin yeni adi: %s", listeisim);
return 0;
}
int main() {
isimver(); // fonksiyonu çağırıyoruz
return 0;
}
Gormeden alt satira geciyor derken? Input beklemiyor mu demeye calisiyorsun? Anlamiyorum. Bir seyi dedigimden farkli yapiyor olmalisin. Kod calisiyor cunku.
fgets() veya eski gets() fonksiyonları kullanıcıdan veri alırken yeni satır karakterini (\n) da alır eğer kullanıcı sadece enter tuşuna basarsa bu yeni satır karakteri okuma işlemi olarak kabul edilir ve program alt satıra geçer.
Çözüm: Eğer sadece boş bir girdiyle karşılaşıyorsanız bu durumu kontrol edip işlem yapabilirsiniz ayrıca yeni satır karakterini temizlemek için şu kodu kullanabilirsiniz:
Eğer önceki bir input fonksiyonu stdin'i temizlemeden işlemi tamamladıysa örneğin scanf() kullanıldıysa fgets() fonksiyonu hemen bir yeni satır (\n) karakterini alabilir ve giriş işlemi sonlanabilir.
Çözüm: stdin'in temizlenmesi gerekebilir eğer önceki inputlardan kalan veriyi temizlemek istiyorsanız şunu ekleyebilirsiniz:
C:
while (getchar() != '\n');
fgets(listeisim, sizeof(listeisim), stdin);
Eğer hata hala devam ediyorsa kodun doğru şekilde çalışıp çalışmadığını görmek için çok basit bir giriş kontrolü ekleyebilirsiniz:
C:
#include <stdio.h>
int isimver() {
char listeisim[50];
printf("\nbir isim giriniz: ");
fgets(listeisim, sizeof(listeisim), stdin);
if (listeisim[0] == '\n') {
printf("Boş girdi alındı. Lütfen tekrar giriniz.\n");
} else {
printf("Listenizin yeni adi: %s", listeisim);
}
return 0;
}
int main() {
isimver();
return 0;
}
Bu kod eğer kullanıcı boş bir input yalnızca enter girerse bu durumu tespit edip ekrana hata mesajı verecektir.
fgets() veya eski gets() fonksiyonları kullanıcıdan veri alırken yeni satır karakterini (\n) da alır eğer kullanıcı sadece enter tuşuna basarsa bu yeni satır karakteri okuma işlemi olarak kabul edilir ve program alt satıra geçer.
çözüm: Eğer sadece boş bir girdiyle karşılaşıyorsanız bu durumu kontrol edip işlem yapabilirsiniz ayrıca yeni satır karakterini temizlemek için şu kodu kullanabilirsiniz:
Eğer önceki bir input fonksiyonu Stdin'i temizlemeden işlemi tamamladıysa örneğin scanf() kullanıldıysa fgets() fonksiyonu hemen bir yeni satır (\n) karakterini alabilir ve giriş işlemi sonlanabilir.
çözüm: Stdin'in temizlenmesi gerekebilir eğer önceki inputlardan kalan veriyi temizlemek istiyorsanız şunu ekleyebilirsiniz:
C:
while (getchar() != '\n');
fgets(listeisim, sizeof(listeisim), stdin);
Eğer hata hala devam ediyorsa kodun doğru şekilde çalışıp çalışmadığını görmek için çok basit bir giriş kontrolü ekleyebilirsiniz:
C:
#include <stdio.h>
int isimver() {
char listeisim[50];
printf("\nbir isim giriniz: ");
fgets(listeisim, sizeof(listeisim), stdin);
if (listeisim[0] == '\n') {
printf("Boş girdi alındı. Lütfen tekrar giriniz.\n");
} else {
printf("Listenizin yeni adi: %s", listeisim);
}
return 0;
}
int main() {
isimver();
return 0;
}
Bu kod eğer kullanıcı boş bir input yalnızca enter girerse bu durumu tespit edip ekrana hata mesajı verecektir.