C/C++ Fgets kullanımındaki problemin sebebi nedir?

KOUsoftware

Hectopat
Katılım
1 Nisan 2020
Mesajlar
157
Yer
İstanbul
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
Hatamın nerede olduğunu anlamamıştım, videodan öğrendim lakin sebebini ve çözümünü bilen varsa yardımcı olabilir mi?

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.

@Vavien

@Vavien.
 
Son düzenleme:
\n karakterini de okuması sorun. Bence bu yüzden basit işler için videodaki çözüm hiç mantıklı değil. Birkaç string işlemi ile \n atılmalı.

Ne yapacağınız size kalmış. Ben genelde scanf kullanıyorum. Nispeten büyük denecek şeyler yapmış olsam da kullanacak adam belliydi. Gelip cins cins inputlar vermeyecekti. O yüzden dert etmedim.

While satırını görüyorsun. Inputu boşaltıyor. Normalde olmaması lazım ama niyeyse oluyor. Ben o olmadan da yazabiliyordum diye hatırlıyorum. Niyeyse sayı verince sapıtıyor. Bir şeyi yanlış yapıyorum muhtemelen.
Scanf içindeki sayılar input boyutunu belirtiyor normalde. Ama pek belirtmiyor. O yüzden en rahatı fgets kullanmak gibi.
Kod:
#include <stdio.h>

#define N 11

int main() {
    char arr[N] = {0};
    char arr2[N] = {0};
    
    printf("arr: ");
    scanf("%5[^\n]%*c", arr);
    printf("%s\n", arr);
    //while (getchar() != '\n');
    
    printf("arr2: ");
    scanf("%6[^\n]%*c", arr2);
    printf("%s\n", arr2);

    return 0;
}
Kod:
#include <stdio.h>
#include <string.h>

#define N 11

int main() {
    char arr[N] = {0};
    char arr2[N] = {0};
    
    printf("arr: ");
    fgets(arr, sizeof(arr), stdin);
    printf("%s\n", arr);
    //while (getchar() != '\n');
    
    printf("arr2: ");
    fgets(arr2, N, stdin);
    printf("%s\n", arr2);
    
    for (int i = 0; i < sizeof(arr2); ++i) {
        printf("%c(%d) ", arr2[i], arr2[i]);
    }
    printf("\n");
    
    arr2[strcspn(arr2, "\n")] = '\0';
    
    for (int i = 0; i < sizeof(arr2); ++i) {
        printf("%c(%d) ", arr2[i], arr2[i]);
    }
    printf("\n");

    return 0;
}
 

Yeni konular

Geri
Yukarı