C'de karakter sayının basamakları int dizisi içine nasıl alınır?

musto444

Hectopat
Katılım
30 Eylül 2020
Mesajlar
81
Merhaba arkadaşlar. C'de yazdığım programda karakter olarak aldığım bir sayıyının (örneğin "767534678") her basamağını tek tek integer olarak int dizi içine almak istiyorum. Bunu nasıl yapabilirim? Bir şeyler denedim fakat olmadı. Yardımcı olursanız sevinirim. Teşekkürler.
 

Dosya Ekleri

  • 20220218_123829.jpg
    20220218_123829.jpg
    122,7 KB · Görüntüleme: 196
Son düzenleyen: Moderatör:
atoi string'i integer'a çeviriyor. Siz char vermeye çalışıyorsunuz. Onu da veremiyorsunuz. Input alırken de hatanız var. %s pointer alır. Yani ampersand gereksiz, hatta muhtemelen soruna yol açıyor.
Doğru kullanım yapsanız bile atoi string aldığı için 123456 girdisi için şöyle bir çıktı verecek: 123456 23456 3456 456 56 6 0 0 0 0. Çünkü string'e bakıyor yani \0 arıyor.

Böyle soruların sonrasında genelde basamaklar toplamı vb. şeyler olduğu için direkt integer olarak alıp o şekilde işlem yapmak genelde en mantıklı şey oluyor. Öyle olmada da genelde akla ilk gelen de o.

Benim aklıma gelen şekil böyleydi. Modunu alarak birler basamağını bulmak, sonra 10'a bölüp o basamaktan kurtulmak. Döngüye laf edebilirsiniz ama assembly açısından en iyisinin yapılacağından emin olduğum için bu tip durumlarda böyle kullanmayı tercih ediyorum.

Kod:
#include <stdio.h>
#include <string.h>

#define N 10
#define MAX_SIZE 11

int main() {
    int num = 0;
    int size = 0;
    int arr[MAX_SIZE ] = { 0 };
    
    printf("sayi gir: ");
    scanf("%d", &num);
    
    for(int i = 0, val = num; val != 0; ++i, ++size, val /= N) {
       arr[i] = val % N;
    }
    
    for(int i = size - 1; i >= 0; --i) {
        printf("%d ", arr[i]);
    }
    
    return 0;
}
Sanırım bu integer yapmıyordu. Ama yine de bir deneyeyim. Çevirdikten sonra bu satılarla aritmetik işlem yapmam gerekecek.
Integer yapıyor. Char'ların integer karşılığını alıyor. Oluşacak farktan kurtulmak için hepsini char sıfır'dan çıkarıyor.
 
atoi string'i integer'a çeviriyor. Siz char vermeye çalışıyorsunuz. Onu da veremiyorsunuz. Input alırken de hatanız var. %s pointer alır. Yani ampersand gereksiz, hatta muhtemelen soruna yol açıyor.
Doğru kullanım yapsanız bile atoi string aldığı için 123456 girdisi için şöyle bir çıktı verecek: 123456 23456 3456 456 56 6 0 0 0 0. Çünkü string'e bakıyor yani \0 arıyor.

Böyle soruların sonrasında genelde basamaklar toplamı vb. şeyler olduğu için direkt integer olarak alıp o şekilde işlem yapmak genelde en mantıklı şey oluyor. Öyle olmada da genelde akla ilk gelen de o.

Benim aklıma gelen şekil böyleydi. Modunu alarak birler basamağını bulmak, sonra 10'a bölüp o basamaktan kurtulmak. Döngüye laf edebilirsiniz ama assembly açısından en iyisinin yapılacağından emin olduğum için bu tip durumlarda böyle kullanmayı tercih ediyorum.
Verdiğiniz cevap için çok teşekkür ederim. Ödev yapmaya çalışıyorum. Ödev de int nin sınırlı sayıda sayı alabildiği, bu yüzden iki sayıyı karakter dizisi olarak almamızı ve daha sonra seçime göre toplama, çıkarma veya çarpma işlemi yapmamızı istiyor. Buna göre kodu yazmam gerekiyor.
@Vavien.

aşağıdaki şekilde bir kod buldum. Sanırım dediğim işlemi yapıyor. Bu kodu girişleri benim yapacağım şekilde nasıl düzenleyebilirim.

Kod:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void printIntegers(long int arr[], size_t size)
{
    for (size_t i = 0; i < size; i++)
        printf("%4ld | ", arr[i]);
    printf("\n");
}

int main(int argc, char *argv[]) {
    char *arr[] = {"12", "33", "43", "23", "90"};

    size_t len = sizeof arr / sizeof arr[0];
    long int arr3[len];
    for (int i = 0; i < len; ++i) {
        arr3[i] = strtol(arr[i], NULL, 10);
    }
    printIntegers(arr3, len);

    exit(EXIT_SUCCESS);
}
 
Son düzenleme:
Verdiğiniz cevap için çok teşekkür ederim. Ödev yapmaya çalışıyorum. Ödev de intnin sınırlı sayıda sayı alabildiği, bu yüzden iki sayıyı karakter dizisi olarak almamızı ve daha sonra seçime göre toplama, çıkarma veya çarpma işlemi yapmamızı istiyor. Buna göre kodu yazmam gerekiyor.
@Vavien.

Aşağıdaki şekilde bir kod buldum. Sanırım dediğim işlemi yapıyor. Bu kodu girişleri benim yapacağım şekilde nasıl düzenleyebilirim?

Kod:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void printIntegers(long int arr[], size_t size)
{
 for (size_t i = 0; i < size; i++)
 printf("%4ld | ", arr[i]);
 printf("\n");
}

int main(int argc, char *argv[]) {
 char *arr[] = {"12", "33", "43", "23", "90"};

 size_t len = sizeof arr / sizeof arr[0];
 long int arr3[len];
 for (int i = 0; i < len; ++i) {
 arr3[i] = strtol(arr[i], NULL, 10);
 }
 printIntegers(arr3, len);

 exit(EXIT_SUCCESS);
}

Hocam eğer yaptıysanız örnek olarak inceleyebilir miyim?
Bayağı uğraştım ama çoğu yerde eksiklerim vardı.
 

Bu konuyu görüntüleyen kullanıcılar

Technopat Haberler

Yeni konular

Geri
Yukarı