[英]Split string into different variables
大家好! 我是C语言的新手,所以我想在一个问题上寻求帮助。 我必须分离一个字符串并将其放入不同的变量中。 想象一下, Sol 3 5
会导致类似:
var1=Sol
var2=3
var3=5
我尝试使用scanf,但是它在第一个空格中停了下来:/。
提前致谢!
干杯!
编辑:这不是我的功课,我只是在练习,但是我现在真的很想知道如何做到这一点:)。 我现在拥有的代码是这样的:
int main () {
char var1[10],var2[10],var3[10],func;
fgets(func, 20, stdin);
fscanf(func,"%s %d %d", var1,var2,var3);
printf("%s %d %d", var1,var2,var3);
return 0;
}
strtok
是您需要的功能:
#include <string.h>
char* str = "Sol 3 5";
char* ptr;
char* saved;
ptr = strtok_r(str, " ", &saved);
while (ptr != NULL)
{
printf("%s\n", ptr);
p = strtok_r(NULL, " ", &saved);
}
请注意:此函数修改了原始字符串,将字符串标记的结尾(null, \\0
)代替了定界符。
好的scanf
还是不错的,但是如果您不清楚家庭作业的意思,我不会帮您的。
编辑和代码发布后
您的问题是您对编译器撒谎。 不要那样做 它不喜欢它:)
您要求编译器读取一个字符串和2个整数...但是然后告诉编译器将结果放入char数组中(仅对第一次转换正确)
/* char[] but %d wants pointer to int */
fscanf(func,"%s %d %d", var1,var2,var3);
/* all var1, var2, and var3 are arrays of char! */
尝试将变量声明为
char var1[10];
int var2,var3;
哦! func
被声明为纯字符。 您可能还需要其他东西。
像这样声明变量后,您需要更改scanf
调用,以传递int的地址,而不是其(未初始化的)值。
有一个类似于scanf
的函数,称为sscanf
。 它的工作原理相同,但是它从字符串而不是文件中读取值:
sscanf("Sol 3 5", "%s%d%d", v1, &v2, &v3);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.