Just The 1st Character
Если вы действительно просто хотите получить первый символ, тогда *line
предоставит вам первый символ из каждой строки. Это эквивалентно line[0]
, и вы можете использовать любой из них взаимозаменяемо. Краткий пример:
#include <stdio.h>
#define MAXC 1024 /* if you need a constant, #define one (or more) */
int main (int argc, char **argv) {
char buf[MAXC];
/* use filename provided as 1st argument (stdin by default) */
FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;
if (!fp) { /* validate file open for reading */
perror ("file open failed");
return 1;
}
while (fgets (buf, MAXC, fp))
printf ("'%c'\n", *buf);
if (fp != stdin) /* close file if not stdin */
fclose (fp);
Пример использования / Вывод
$ ./bin/fgets_sscanf_first dat/multivals.txt
'3'
'1'
'2'
'V'
'H'
Вы можете сохранить, а затем проверить, является ли первый символ ди git с isdigit(*line)
(или как указано выше isdigit(*buf)
). С одним di git вы можете вычесть '0'
, чтобы получить значение цифры c. См. Таблица ASCII
Разделение всех значений
Вы можете использовать sscanf
для разделения одного или всех значений в строке, пытаясь проанализировать все 3 значения из строки, а затем проверка возврата , чтобы узнать, была ли у вас строка с круглыми скобками (возврат 3) или один символ (возврат 1). Вы можете использовать строку формата " %c(%d,%d"
(пробел перед "%c"
гарантирует, что начальные пробелы игнорируются). Вы можете использовать if/else
или простой оператор switch
для обработки различных случаев, например,
#include <stdio.h>
#define MAXC 1024 /* if you need a constant, #define one (or more) */
int main (int argc, char **argv) {
char buf[MAXC];
/* use filename provided as 1st argument (stdin by default) */
FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;
if (!fp) { /* validate file open for reading */
perror ("file open failed");
return 1;
}
while (fgets (buf, MAXC, fp)) {
char c;
int v1, v2;
switch (sscanf (buf, " %c(%d,%d", &c, &v1, &v2)) {
case 1 : printf ("single char/digit: '%c'\n", c);
break;
case 3 : printf ("all values: %c %d %d\n", c, v1, v2);
break;
default : fputs ("invalid line format\n", stderr);
}
}
if (fp != stdin) /* close file if not stdin */
fclose (fp);
}
Пример использования / Вывод
$ ./bin/fgets_sscanf_multival dat/multivals.txt
all values: 3 3 3
all values: 1 5 4
all values: 2 7 7
single char/digit: 'V'
single char/digit: 'H'
Там Есть много, много способов сделать это, и это только один. Просмотрите все ваши ответы и дайте мне знать, если у вас есть дополнительные вопросы.