Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

215
Visualizações
¿Qué formato debo usar: scanf \string,string,int,int/?

Tengo datos en el siguiente formato \a,b,c,d/ donde a,b son cadenas de letras y números; c, d son números enteros.

Intenté usar el formato \%s,%s,%d,%d/ para escanearlo, pero eso hace que a,b,c,d/ se escaneen en la primera cadena en lugar de solo a.

Pregunta:

¿Hay algo que pueda escribir en el formato para lograr el resultado deseado?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Puede usar la siguiente cadena de formato para usar comas como delimitadores:

 "\\%[^,],%[^,],%d,%d/"

La idea es decirle a scanf que lea cualquier cosa que no sea una coma para cada cadena, luego lea la coma delimitadora y continúe.

Aquí hay un ejemplo (¡malo e inseguro!):

 char a[100], b[100]; int c=0, d=0; scanf("\\%[^','],%[^','],%d,%d/", a, b, &c, &d); printf("%s, %s, %d, %d\n", a, b, c, d);

En código real, querrás escribir algo más seguro. Por ejemplo, puede usar fgets para leer una línea completa de entrada y luego reutilizar la misma cadena de formato con sscanf para analizarla.

over 4 years ago · Santiago Trujillo Relatório

0

Lea atentamente la documentación de fscanf(3) .

Podrías intentar algo como

 char str1[80]; char str2[80]; memset (str1, 0, sizeof(str1)); memset (str2, 0, sizeof(str2)); int n3 = 0, n4 = 0; int pos = -1; if (scanf ("\\ %79[A-Za-z0-9], %79[A-Za-z0-9], %d, %d /%n", str1, str2, &n3, &n4, &pos) >= 4 && pos > 0) { // be happy with your input } else { // input failure }

Eso no funcionará si tienes una noción más amplia de las letras, como la é francesa o la Ы rusa; ambas son letras individuales existentes en UTF-8 pero representadas en varios bytes.

Agregué algunos espacios (principalmente para facilitar la lectura) en la cadena de formato (pero scanf a menudo se salta espacios de todos modos, por ejemplo, para %d ). Si no acepta espacios, como una línea de entrada como \AB3T, C54x, 234, 65/ , lea cada línea con getline(3) o fgets(3) y analícela manualmente (quizás con la ayuda de sscanf y strtol ...). ¡Observe que %d está omitiendo espacios! También estoy limpiando las variables para obtener un comportamiento más determinista. Tenga en cuenta que %n le da la cantidad de caracteres leídos (¡en realidad, bytes!) y que scanf devuelve la cantidad de elementos escaneados.

over 4 years ago · Santiago Trujillo Relatório

0

Mi solución directa:

 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char a[10010]; gets(a); int l = strlen(a); char storded_first[10010], storded_second[10010]; char for_int_c[10010], for_int_d[10010]; int c,d; char first_symbol, last_symbol; int i; int cnt = 0; int j=0; for(i=0; i<l; i++) { if(a[i]=='\\') first_symbol = a[i]; else if(a[i]=='/') last_symbol = a[i]; else if(a[i]==',') { cnt++; j=0; } else if(cnt==0) { storded_first[j]=a[i]; j++; } else if(cnt==1) { storded_second[j]=a[i]; j++; } else if(cnt==2) { for_int_c[j]=a[i]; j++; } else if(cnt==3) { for_int_d[j]=a[i]; j++; } } c = atoi(for_int_c); d = atoi(for_int_d); printf("%c%s, %s, %d, %d%c\n",first_symbol, storded_first, storded_second, c, d, last_symbol); return 0; }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda