Seorang pemula di C mencoba mengekstrak dua angka dari sebuah string menggunakan sscanf(). Angka-angka harus diuraikan dari string yang diformat seperti "7-12", yang akan menghasilkan firstNode = 7dan secondNode = 12. Jadi saya ingin mendapatkan angka, tanda minus bisa dipahami sebagai pemisah angka. Implementasi saya saat ini mirip dengan contoh yang saya temukan di ini JADI jawaban:

void extractEdge(char *string) {
    int firstNode = 123;
    int secondNode = 123;

    sscanf(string, "%*[^0123456789]%u%*[^0123456789]%u", &firstNode, &secondNode);
    printf("Edge parsing results: Arguments are %s, %d, %d", string, firstNode, secondNode);
}

Tetapi jika saya menjalankan kode di atas, selalu ada nilai awal 123 untuk kedua int. Perhatikan bahwa output string memberikan String input yang benar, jadi saya pikir string yang tidak valid tidak mungkin menjadi penyebab masalah ini.

Adakah ide mengapa kode tidak berfungsi? Terima kasih sebelumnya atas bantuan Anda.

1
BenjyTec 19 November 2020, 16:37

1 menjawab

Jawaban Terbaik

%*[^0123456789] memerlukan satu atau lebih karakter non-digit, tetapi karakter pertama yang Anda masukkan 7-12 adalah digit. Ini membuat sscanf() berhenti di situ dan tidak membaca apa-apa.

Hapus itu dan gunakan "%d%*[^0123456789]%d" sebagai penentu format untuk menangani 7-12.

Perhatikan juga bahwa penentu format yang benar untuk membaca desimal int adalah %d, bukan %u. %u adalah untuk membaca unsigned int.

1
MikeCAT 19 November 2020, 13:40