Проверка string на число - C (СИ)

  1. Здравствуй, форумчанин! У меня есть string с данными. Файл: 12 2 пыфрп 145 512 прфы 42 ап Вот. Как мне сделать проверку каждой строки? Мне нужно посмотреть, в данной строке находится цифра, или слово. я считал эти данные из файла. Стринг я не могу проверить по аски коду. Есть ли еще способы? C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 int main () {   string line;   int count = 0;   ifstream myfile ("example.txt");   if (myfile.is_open())   {     while ( myfile.good() )     {       getline (myfile,line);       cout << line << endl;       if(line >= '0' && line <= '9')  // error       {           count ++;       }     }     myfile.close();   }     else cout << "Unable to open file";   cout << count;     _getch();   return 0; }Добавлено через 1 час 20 минут переделал на char как проверить, является строка числом?C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 int main () {   const int charlength = 1024;   char buffer[charlength];   int count = 0;   FILE *myfile = fopen ("example.txt", "r");   if (myfile)   {     while ( !feof(myfile) )     {       fgets (buffer, charlength , myfile);       printf(buffer);       if (buffer) count++;     }   }       else printf ("Unable to open file");       printf("\r\n%d", count);     _getch();   return 0; }


textual

Код к задаче: «Проверка string на число - C (СИ)»

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
 
#define CHARLEN 1024
 
int isNum(char *str) {
    int i = 0;
    int rez = 1;
    if (isdigit(*str) || *str == '+' || *str == '-') {
        for (i = 1; i < strlen(str) && str[i] != '\n'; ++i) {
            if (!isdigit(str[i])) {
                rez = 0;
                break;
            }
        }
    } else
        rez = 0;
    return rez;
}
 
int main() {
    char buffer[CHARLEN];
    int count = 0;
    FILE *myfile = fopen("ex.txt", "r");
    if (myfile) {
        while (fgets(buffer, CHARLEN, myfile)) {
            printf("Loaded => %s", buffer);
            if (buffer[0] != '\r' && buffer[0] != '\n')
                count++;
            if (isNum(buffer))
                printf("--> is num\n");
        }
    }
//
    else
        printf("Unable to open file");
 
    printf("\r\n%d", count);
    return 0;
}

СДЕЛАЙТЕ РЕПОСТ

8   голосов, оценка 3.750 из 5



Похожие ответы
  1. в borland С нужно осуществить проверку на ввод, пользователь дожлен ввести число, как проверить ввел позльзователь число или что то другое

  1. Необходимо ввести число в диапазоне от 1 до 8. Правильность ввода числа типа int уже проверена, но как проверить, входит ли введенное число в диапазон? C1 2 3 4 5 6 7 8     printf ("\nВведи положение  -> ");         do         {         res_x=scanf ("%d", &x);             fflush(stdin);             if (res_x!=1) printf("Неправильный ввод, вводи цифры! -> ");                                                }         while (res_x!=1);

  1. Как я понимаю: использовать scanf + массив для проверки на корректность ввода - неудачная идея. Она не чистит буфер, который предоставляет stdio ( ни совсем понимаю чего там происходит )).C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include   int main(void){       int n;   // Вариант с выходом из программы - все работает     printf("Введите значение: ");     if ( (scanf("%d",&n) ) != 1 ){         printf("Неверное введенное значение");         return 1;     }   // проверка с использованием цикла - зацикливает       printf("Введите значение: ");     while ( (scanf("%d",&n) ) != 1 )         printf("Неверное введенное значение, попробуйте еще: ");     printf("Успех!"); }Неужели единственный способ корректной проверки, это использовать функции read или getс, посимвольно считывать в массив, и потом уже проверять ??

  1. Привет форумчане, возникла следующая проблема есть два массива number[10] и command[10], нужно их соединить вместе но чтобы между ними была точка с запятой ';', а потом нужно этот новый массив разделить на две части new_number[10] и new_command[10]. Привожу ниже свой код, буду благодарен за советы как сделать это правильнее и красивееC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include #include #include   int main(void) {     char old_num[10] = "123456";     char old_com[10] = "text";     char buffer[50];         sprintf(buffer, "%s%c%s%c", old_num, ';', old_com, '\0');         char number[10];     char cmd[10];       char *p = strchr(buffer, ';');     memcpy(number, buffer, p - buffer);     number[p - buffer] = '\0';     *(p++);     char *p2 = strchr(p, '\0');     memcpy(cmd, p, p2 - p);     cmd[p2 - p] = '\0';       return 0; }

  1. Доброго времени суток.Задача состоит в том , чтобы подсчитать сумму чисел в строке, слова в которой могут состоять только из цифр или букв.Моя проблема состоит в том, что я не могу понять как сказать компилятору не считывать каждый символ в строке. Для лучшего пояснения что мне нужно, прибегну к математике, если я введу asd 55 posd 41, в коде ниже sum = 18, мне нужно чтобы sum = 96C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 include #include #include #include void main() {     setlocale(LC_ALL, "Rus");     int i;     int sum = 0;     char *str;     str = (char *)malloc(10);       printf("Введите строку:");       gets(str);        for (i = 0;str[i] != 0; i++)     {         if (str[i] >= '0' && str[i] <= '9' )         {             sum += str[i] - '0';         }     }     printf("sum=%d\n", sum);       return 0; }

  1. http://cppstudio.com/post/276/ по данной таблице пытаюсь сделать проверку на русские символы, но почему-то они не отображаются. Ввод-вывод в задание нормально, а проверку в условии if в ф-ции char* zadanie2() не проходят. С латиницей всё ок. В чём может быть дело? Убил полвечера( C1 if ((*first > 64 && *first < 91) || (*first > 96 && *first < 123) ||  //кириллица         (*first > 127 && *first < 176) || (*first > 223 && *first < 244))C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 #include #include #include #include #include   int line(); int coloumn(); float *vvod(int, int); float *zadanie1(float *,int , int); void vivod(float *,int, int); char* zadanie2();   int main() {       SetConsoleCP(1251);// отображение кириллицы в консоли для ввода и вывода, в консоли нужно выбрать свойства-> шрифт-> поставить Lusida console     SetConsoleOutputCP(1251);       float *mas=0;     char *mas2=0;     int l=0, c=0;     int switcher = 1, switcher2 = 1, a, s; //переключатели     int b=0, u=0; // проверка условия     setlocale(LC_ALL, "Russian");     while (switcher != 0)     {         system("cls");         printf("1:Ввод массива \n2:Выполнить задание 1 \n3:Вывод массива \n4:Выполнить задание 2\n5:Выход\n\n\tВведите значение:  ");         scanf_s("%d", &a);         switcher2 = 1;         switch (a)         {             case 1:             {                 getchar();                 system("cls");                 l = line();                 c = coloumn();                 mas = vvod(l, c);                 b = 1;             break;             }             case 2:             {                 if (b == 0) {                     printf("\n\tМассив не введён!\n\n");                     system("pause");                     break;             }                 system("cls");                 mas = zadanie1(mas, l, c);                 getchar();                 getchar();                 system("cls");                 break;             }             case 3:             {                 while (switcher2 != 0)                 {                 system("cls");                 printf("1:Вывод массива\n2:Вывод строки\n3:Выход в меню\n\n\tВведите значение:  ");                 scanf("%d", &s);                 switch (s)                 {                     case 1:                     {                         if (b == 0) {                             printf("\tУкажите массив\n\n");                             system("pause");                             break;                         }                         vivod (mas, l, c);                         getchar();                         getchar();                         break;                     }                     case 2:                     {                     if (u == 0) {                         printf("\n\tВведите строку\n\n");                         system("pause");                         break;                     }                     printf("\n\t%s", mas2);                     getchar();                     getchar();                     break;                     }                     case 3:                     {                         switcher2 = 0;                         break;                     }                     default:                     {                     printf("\nНеверный ввод!");                     getchar();                     getchar();                     system("cls");                     }                 }                 }                 break;             }             case 4:             {                 system("cls");                 getchar ();                 mas2 = zadanie2();                 getchar();                 u = 1;                 break;             }             case 5:             {                 switcher = 0;                 break;             }             default:             {                 printf("\nНеверный ввод!");                 getchar();                 getchar();                 system("cls");             }         }     }     return 0; }   int line() {     int l;     printf("Количество строк: ");     scanf_s("%d", &l);     return l; }   int coloumn() {     int c;     printf("Количество столбцов: ");     scanf_s("%d", &c);     return c; }   float *vvod(int x, int y) {     float *mas=0;     int i, j, l = x, c = y;     mas = (float*)malloc(l*c*sizeof(float));     for (i = 0; i= 0)// z == 0 -> строка изменится только 1 раз                   for (j = 0; j < c; j++) {                     *(mas + (i-1)*c + j) *= -1;                 z = 1;                 }         }     }     printf("\n\nПреобразованный масcив:");     vivod(mas, l, c);     return mas; }   char* zadanie2() {     char *first, *last, *ptr;     static char *str;     int n, a=0, i = 0, count = 0, len = 0, flag;     do {     printf("Введите максимальную длину строки: ");     scanf("%d", &n);} while (n < 5);     str = (char *)malloc(n*sizeof(char));     fflush(stdin);// очистка входного потока     printf("Введите исхолную строку: ");     fgets(str, n, stdin);     while(str[i]){         if(str[i] != ' ' && str[i] != '\n')             len++;         else{             if(str[i - 1] != ' '){             for(last = &str[i - 1], ptr = first = last - len + 1, flag = 0; first < last; first++, last--){                 if(*last != *first){                     flag = 1;                     break;                 }             }             if(!flag && len > 1){                 first = ptr;                 a = 0;                 while(*first != ' ' && *first != '\n') {                 if ((*first > 64 && *first < 91) || (*first > 96 && *first < 123) || (*first > 127 && *first < 176) || (*first > 223 && *first < 244))//ЭТО ЗДЕСЬ!                     a++;                 *first++;                 }                 first = ptr;                 if (len == a){                 while(*first != ' ' && *first != '\n')                     putchar(*first++);//выводит посимвольно строку с адресом first, последовательно увеличивая счёчик вывода                 count++;                 putchar('\n');                 }             }             len = 0;             }             }         i++;         if (str[0] == '\n')             count = 0;     }     printf("Total %d words.\n", count);       return str; }

  1. Всем привет! Снова вопрос, как можно реализовать следующую вещь: Допустим я ввожу какой либо символ из 3 (в моем случае F,C или K) и перед ним цифру. 1 цель: Если буква отличается от F,C или K, (например введу 42G) то он выдает мне "G is not a valid temperature type. Ending program." 2 цель: Если я ввожу не просто цифры и всего лишь одну букву, а ввожу например целое слово (например 420 Blaze), то он выдает "Invalid formatting. Ending program." Мои небольшие старания (необходимая часть программы) в ней только 2 цель реализована:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 void temperature() {     float numerial = 0;     char FirstChoiceTemp = 'o';         printf("Enter the temperature followed by its suffix (F, C, or K): ");     scanf(" %f %c",&numerial,&FirstChoiceTemp);         if( (FirstChoiceTemp == 'K') || (FirstChoiceTemp == 'k') ){         Kelvin(numerial);               //вызываем функцию и передаем значение     }     else if( (FirstChoiceTemp == 'C') || (FirstChoiceTemp == 'c') ){         Celsii(numerial);     }     else if( (FirstChoiceTemp == 'F') || (FirstChoiceTemp == 'f') ){         Farenheit(numerial);     }     else {         printf("Invalid formatting. Ending program.");     }     }В ней реализована только 2 цель, и если я введу 42 G, он не выведет мне ""G is not a valid temperature type. Ending program." Может стоит еще один else if добавить? Хоть я пытался что,то выкрутить с помощью этого, не вышло

  1. Доброго времени суток, дамы и господа! Может-ли кто-нибудь подсказать в какую сторону мне копать? Я новичок. И так, задание. Реализовать проверку валидности карт по вводу 15-16-ти значного номера за алгоритмом луна для AMEX, MasterCard и Visa. Т.е. пользователь вводит номер, а ему пишут чья это карта и валидна-ли она за этим алгоритмом. В обшем, т.к. я новичок, то я просто не знаю с чего мне начать. Подскажите, а?

  1. Проблема такая. В библиотеке была создана глобальная переменная(extern int key. Чтобы можно было ей пользоваться, на сколько я понял, требуется в любом .c файле проинициализировать её (int key = a. А условие такое, что в main нельзя её инициализировать и требуется написать функцию int generation() которая будет возвращать ++key. Можно ли где-нибудь в другом месте её проинициализировать или проверить, случалось ли это ранее?

  1. Необходимо проверить один массив на наличие другого в нём. То есть проверить есть ли в массиве А элементы массива B и вывести их на экран. Элементы не обязательно должны быть с одинаковыми индексами. Вот мой код. На строке if (A[i] == B[j]) программа вылетает и выдает ошибку: Вызвано исключение: нарушение доступа для чтения. B было 0xE14000.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include "stdafx.h" #include "stdio.h" #include #include #include   int main() {     setlocale(LC_ALL, "RUS");     int B[] = { 23470 };     const int n=10;     int A[n];     int i = 1, j, N;       //создание и ввод массива     printf("Введите символы массива А   \n");     for (i = 0; i < n; i++)     {         scanf_s("%d", &A[i]);     }       //вывод цифр     printf("Цифры:    ");     for (i = 0; i < n; i++)     {         for (j = 0; i < n; j++)         {             if (A[i] == B[j])                 printf("%d", A[n]);         }     }       system("pause");     return 0; }