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;
}
答案 0 :(得分:3)
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);
}
只需注意:此函数修改原始字符串,将字符串标记的末尾(空值,\0
)替换为分隔符。
好吧scanf
无论如何都会很好,但是如果你没有说清楚它是否是家庭作业,我就不会帮助你。
答案 1 :(得分:3)
编辑和代码发布后
你的问题是你骗了编译器。不要那样做。它不喜欢它:)
你要求编译器读取一个字符串和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的地址,而不是它们的(未初始化的)值。
答案 2 :(得分:0)
有一个类似于scanf
的函数sscanf
。它的工作方式相同,但它从字符串而不是从文件中读取值:
sscanf("Sol 3 5", "%s%d%d", v1, &v2, &v3);