Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何从包含由空格分隔的字符串和整数的用户处获取输入?_C_Input_Syntax_Scanf - Fatal编程技术网

C 如何从包含由空格分隔的字符串和整数的用户处获取输入?

C 如何从包含由空格分隔的字符串和整数的用户处获取输入?,c,input,syntax,scanf,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 strin

如何从包含由空格分隔的字符串和整数的用户处获取输入

用户仅以以下形式输入:

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

在第一种情况下,只输入字符串,后面没有整数 在第二行中,字符串和一个整数紧跟其后 在3rd中,后面跟着两个整数

要求:我想将字符串保存到变量“input”中,将整数保存到变量“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;
}
#包括
int main()
{
int p,q;
字符输入[100];
printf(“\n输入:\n”);
扫描(“%s%d%d”,输入,&p,&q);
printf(“%s和%d和%d”,输入,p,q);
返回0;
}
上述代码的问题:如果用户输入,它将失败

mystring(或)


mystring 100

我的方法如下:
1.将整个字符串作为输入字符串,即mystring 100(或)mystring 100(或)mystring
2.使用strtok关键字
3.维护一个变量count,
如果count为1,count为2,则将其类型转换为整数和 将其存储到各自的变量中。 `


请说明您尝试了什么,以及您在尝试中遇到了什么问题。您使用了
scanf
标记,因此我假设您尝试使用该标记。为什么不能使用
scanf
?主要问题是字符串后面的整数数量可能会变化,因此只需在循环中调用
scanf
。再一次,请显示您尝试过的代码。我不确定您在说什么。每个
scanf
调用都可以使用部分或全部输入。例如,您可以执行
scanf(“%s”)
来读取第一个字符串。之后,输入缓冲区仍将包含下一个整数。然后,您可以在循环中调用
scanf(“%d”)
,直到它返回0或读取了预期的整数数。您知道scanf有一个返回值,是吗?您的代码(与大多数scanf相关问题的代码一样)不明智地忽略了它,但如果您没有阅读,请参阅我提供的另一个链接。当您可以只使用
sscanf()
时,为什么要使用
strtok()
atoi()
,以及相关的复杂性和问题?
// 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; 
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) ;