Как получить ввод от пользователя, который содержит строку и целое число, разделенные пробелом? - PullRequest
0 голосов
/ 09 февраля 2020

Как получить ввод от пользователя, который содержит строку и целое число, разделенные пробелом?

Пользователь вводит только следующую форму:

string1 999 1001

, где строка1 может быть любая строка длиной не более 100 и последующее целое число может быть любым целым числом от 1 до 10 ^ 9, а число целых чисел, следующих за строкой, может быть 1 или 2

Как у меня может быть

Ok see my code, but is basically useless. 
My problem is that the user enters inputs in following form

string1 
string2 100
string3 100 200

Во-первых, вводится только строка, и после 2-го числа после нее не следует целое число, за 3-ей следует строка и одно целое число, за ней следуют два целых числа

Требование: я хочу сохранить строку в переменной " введите "и целые числа в переменную" num1 "," num2 ", потому что мне нужно выполнить их позже.

Как я могу сделать это в C? Я боролся с этим с незапамятных времен, пожалуйста, помогите

мой код

#include<stdio.h>

int main()
{
    int p, q;
    char input[100];

    printf("\nEnter:\n");
    scanf("%s %d %d", input, &p, &q);
    printf("%s and %d and %d", input, p, q);

    return 0;
}

Проблема с приведенным выше кодом: он потерпит неудачу, если пользователь введет

mystring (OR)

mystring 100

1 Ответ

0 голосов
/ 09 февраля 2020

Мой подход заключается в следующем:
1. Взять всю эту строку ввода, т.е. mystring 100 100 (или) mystring 100 (или) mystring
2. Разбить строку на «пробел», используя strtok ключевое слово
3.Введите переменную count,
, если count равен 1, а count равен 2, приводит к целому числу и сохраняет его в соответствующих переменных. `

// CODE
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
char str[] = "mystring 130 102";
char *token = strtok(str, " "); 
char *mystring =token ; 

int count = 0 ;

while (token != NULL) 
{ 
    if(count == 1 )
      num1 = atoi(token);
    if(count == 2) 
      num2 = atoi(token) ; 
    token = strtok(NULL, " "); 
    count++ ;
} 
printf("%s\n" , mystring);
printf("%d\n" , num1) ; 
printf("%d\n" , num2) ; 

return 0; 

РЕДАКТИРОВАТЬ
Мы все еще можем использовать sscanf () , чтобы уменьшить сложность в соответствии с комментарием ниже на

char *mystring = "mystring 102 293";
char str[20] ; 
int num1, num2[100];
strcpy( dtm, "mystring 102 293" );
sscanf( dtm, "%s  %d  %d", str, &num1, &num2 );
printf("%s\n" , mystring);
printf("%d\n" , num1) ; 
printf("%d\n" , num2) ; 
...