Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

212
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!