如何从用户输入包含空格和空格的字符串和整数?

时间:2020-02-09 10:21:58

标签: c input syntax scanf

如何从用户那里输入包含空格和空格的字符串?

用户仅以以下形式输入:

string1 999 1001

其中string1可以是长度不超过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

首先,仅输入字符串,之后没有整数 在第二个中,字符串和一个整数跟随 在第三中,紧随其后的是两个整数

要求:我想将字符串保存到变量“输入”,将整数保存到变量“ 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 :(得分:0)

我的方法如下:
1.将这整个作为输入字符串,即mystring 100100(或)mystring 100(或)mystring
2.使用 strtok 关键字
在“空格”中分隔字符串 3.保持变量计数,
如果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; 

EDIT
我们仍然可以使用 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) ; 
相关问题