Я написал короткий пример кода, чтобы проиллюстрировать мою проблемуформат зсапЕ игнорировать ненужные символы
#include <stdio.h>
#include <string.h>
unsigned parseAndCompareDouble(const char* inSTR, const char* inF, const char * expect, const char * outF){
unsigned e = 0;
char buffer[2000];
double a = 0;
if(1 != sscanf_s(inSTR, inF, &a, sizeof(double))) e += 1;
if((int) strlen(expect) != sprintf_s(buffer, 2000, outF, a)) e += 1;
if(0 != strcmp(expect, buffer)) e += 1;
return e;
}
unsigned main(void)
{
unsigned e = 0;
const char * universalFormat = "X/%lf";
e += parseAndCompareDouble("X/100", universalFormat, "X/100", "X/%3.0lf");
e += parseAndCompareDouble(" X/100\r\n", universalFormat, "X/100", "X/%3.0lf");
e += parseAndCompareDouble(" X/99\r\n", universalFormat, "X/99", "X/%2.0lf");
e += parseAndCompareDouble(" X/99 ", universalFormat, "X/99", "X/%2.0lf");
e += parseAndCompareDouble("X/99", universalFormat, "X/99", "X/%2.0lf");
e += parseAndCompareDouble(" \"X/100\"\r\n", universalFormat, "X/100", "X/%3.0lf");
if(0 != e){ printf("%2u errors occured\n", e); }
else{ printf("all pass\n", e); }
return e;
}
Я ищу universalFormat
, что позволяет мой пример арматуре пройти тест. Я пытался поиграть с %*s
, но я просто не понимаю. Мне не хватает понятия.
Может кто-нибудь предоставить universalFormat
, который соответствует этому примеру и объясняет, как туда добраться.
Я предполагаю, что «ненужным» персонажем является все, что не в 'ожидать'. Как насчет функции, которая создает новую строку, которая удаляет все ненужные символы из 'inStr'? Затем вы вызываете scanf в новую строку. – user2233706
@ пользователь2233706 ваше предположение верно. Мне нужно проверить содержимое и прочитать его несколько раз. Это будет частью очень ограниченного математического анализатора, который должен построить и отличить известный набор типов функций. Я позже опишу некоторые символы, чтобы помочь мне проверить, что у меня есть правильная функция. Функциональный формат всегда является пробелом + "+ functiondata +" + whitespace. – Johannes