Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

220
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda