Как вы можете использовать scanf в c для чтения строки между скобками? например, как я могу получить «myString», если текст в файле «text a 123 (myString) text»?Как использовать fscanf для чтения из (to)?
ответ
Просто читать вашу линию вы можете иметь что-то вроде
char a[50];
fscanf(stdin,"%*s %*s %*d (%[^)]) %*s",a);
Этот ответ неверен. 'a' - массив символов. Вызов 'fscanf()' должен принимать 'a' как аргумент, а не' & a'. – ace
Цитата из [this SO answer] (http://stackoverflow.com/a/5407121/3488231), «это неправильно, и это может потерпеть неудачу на некоторых платформах». Они являются указателями на разные типы. Если вы скомпилируете gcc, это отобразится: 'warning: format '% s' ожидает аргумент типа 'char *', но аргумент 2 имеет тип 'char (*) [50]' [-Wformat =]' – ace
@ace Очень сложно, почему это может потерпеть неудачу, и как ответ говорит, кто знает, на какой платформе это выходит из строя. – Gopi
Полный пример:
#include <stdio.h>
int main(){
const char data[] = "text a 123 (myString) text";
char str[20];
sscanf(data, "%*s %*c %*d (%[^)]", str);
puts(str);
return 0;
}
Обновлено:
Вы можете заменить sscanf строку со следующим (игнорировать не avrytihing до (
и затем читать до )
:
sscanf(data, "%*[^(](%[^)]", str);
Примечание: Я не уверен, насколько переносима такая практика программирования, но она работает хотя бы на Ubuntu 12.04.
Пример:
#include <stdio.h>
#include <stdlib.h>
int main(){
char mystring[1025];
FILE * fp = NULL;
fp= fopen("dd.txt","r");
if(!fp){
}else{
fscanf(fp, "%*s %*c %*d (%[^)] %*s",mystring);
printf("%s\n",mystring);
}
fclose(fp);
}
Вы можете использовать %[]
в качестве бедного человека регулярного выражения:
#include <stdio.h>
int main(){
const char data[] = "text a 123 (myString) text";
char str[20];
int cr = sscanf(data, "%*[^(](%[^)])", str); /* skip until '(' and read up to ')' */
if (cr == 1) {
printf(">%s<\n", str);
}
else {
printf("NOT FOUND\n");
}
return 0;
}
выше программы корректно выводит:
>myString<
Вероятно, достаточно хорошо для OP, но это не гарантирует окончательный '') '' существовал или последующий «текст». – chux
- 1. Использовать fscanf для чтения из заданной строки
- 2. Как использовать fscanf для чтения строки для анализа на переменные?
- 3. Использование fscanf для чтения из/proc C++
- 4. Как использовать fscanf() для чтения файла с целым числом?
- 5. Как использовать fscanf для чтения файлов в c (Ошибка сегментации)?
- 6. Ошибка чтения C - fscanf
- 7. проблема чтения fscanf
- 8. Есть ли способ использовать fscanf для чтения в следующем пробеле?
- 9. fscanf to structure array
- 10. Использование fscanf для чтения форматированной строки из файла
- 11. Использование fscanf для чтения неизвестного количества команд
- 12. Использование fscanf() для чтения из csv-файла в C
- 13. с помощью fscanf для чтения в целое число из файла
- 14. Как правильно использовать fscanf?
- 15. Как использовать char из fscanf as int
- 16. fscanf чтения формат не работает
- 17. PHP Использование одного fscanf для чтения из нескольких строк?
- 18. Проблема чтения информации от fscanf
- 19. Как использовать fscanf() для ввода разных параметров?
- 20. Как использовать fscanf для разбора двоичного файла
- 21. Как использовать fscanf для обнаружения разрывов строк?
- 22. Как использовать fscanf() для получения строк из нескольких форматов?
- 23. Как использовать IStringStream для чтения из файла?
- 24. Как существовать из петли fscanf?
- 25. Использование fscanf() в c для чтения нескольких строк
- 26. Проблема с использованием fscanf для чтения координат в C
- 27. Использование fscanf в MATLAB для чтения неизвестного количества столбцов
- 28. Использовать filestream для чтения файла из ресурсов
- 29. Сбой программы после чтения данных из файла с помощью fscanf
- 30. fscanf() для чтения только символов без знаков препинания
Этот вопрос должен быть задан на сайте программирования например, stackoverflow или [программисты] (http://programmers.stackexchange.com) – Albert
Этот вопрос кажется вне темы, потому что речь идет о программировании на C (и на самом деле не имеет ничего общего с Unix или Linux). Пожалуйста, рассмотрите [так]. – derobert
Вместо того чтобы пытаться сжать 'scanf()' до предела того, что он может сделать, и риск создать ошибку, подумайте об использовании библиотеки regexp. – potrzebie