Bir karakter dizisi içeriğinin float bir sayı olup olmadığını kontrol etmek için, dizi içindeki her bir karakteri ayrı ayrı kontrol etmek gerekir.
Aşağıdaki program, is_float() fonksiyonunu kullanarak, , ilk karakter - veya + ise bir sonraki karaktere geçer. Sonraki karakterlerin ondalık sayı sistemindeki bir rakama (0-9) veya nokta işaretine eşit olduğunu, nokta karakterinin sadece bir kez kullanıldığını ve karakter dizisinin son karakterinin '\0' karakteri olduğunu kontrol eder. Tüm kontroller olumlu ise, 1 değerini değilse 0 değerini geri döndürür.
#include <stdio.h>
int is_float(char str[]);
int main(void)
{
char cdizi1[] = "1269.78";
char cdizi2[] = "4ab2.kd1";
char cdizi3[] = "3 57.25";
printf("%s float bir değer %s.\n", cdizi1, is_float(cdizi1) ? "içerir" : "içermez");
printf("%s float bir değer %s.\n", cdizi2, is_float(cdizi2) ? "içerir" : "içermez");
printf("%s float bir değer %s.", cdizi3, is_float(cdizi3) ? "içerir" : "içermez");
return 0;
}
int is_float(char str[]) {
int i = 0;
int dot_count = 0;
// Başlangıçta işaret kontrolü
if(str[i] == '-' || str[i] == '+') {
i++;
}
while (str[i] != '\0') {
// Karakter rakam veya . işareti değilse
if((str[i] < 48 || str[i] > 57) && str[i] != '.') {
return 0;
}
// Karakter . işareti ise
if(str[i] == '.') {
dot_count++;
// İki noktadan fazla olmamalı
if(dot_count > 1) {
return 0;
}
}
i++;
}
// Dizinin sonundaki null karakteri kontrol etme
if(str[i] == '\0') {
return 1;
}
else {
return 0;
}
}
Yukarıdaki programı derleyip çalıştırdığımızda, aşağıdaki ifadeleri ekrana yazar:
1269.78 float bir değer içerir. 4ab2.kd1 float bir değer içermez. 3 57.25 float bir değer içermez.