c - Scanf 过滤输入
问题描述
我的问题很简单,我想用它scanf
来过滤输入并将每个单词放在array of string (array char 2d)
我试过了,fgetc()
但至少对我来说很难听懂每一个字。
data.txt
add $t3,$s3,$s5
sh $v0,8($s0)
预期结果 :
add
$t3
$s3
$s5
sh
$v0
8
$s0
假设我们需要一个 10x10 的数组:
char test [10][10];
strcpy(test[0],"add");
...
... // looping until the last input
...
strcpy(test[7],$s0);
- 编辑 -
我尝试了这段代码,它只处理一行进行测试:
char test[10][10]
char c;
unsigned int i = 0 , j = 0;
FILE *fp = fopen("./data.txt", "rb");
while((c=fgetc(fp)) != EOF )
{
if (c == ' ' || c == '(' || c == ')' ){
}else if( c == '$' || (c == ',')){
i++;
j = 0;
test[i][j]=c;
j++;
}else if(c == '\n'){
i = 0;
j = 0;
break;
}else{
test[i][j]= c;
j++;
}
}
谢谢你的时间。
解决方案
我迟到了,但如果你不需要scanf()
为此使用家庭功能,你可以使用strtok()
.
做类似的事情
FILE *fin = fopen("input.txt", "r");
if(fin==NULL)
{
return -1;
}
char buff[50];
while(fgets(buff, sizeof(buff), fin)!=NULL)
{
for(char *ptr=strtok(buff, " (),\n"); ptr!=NULL; ptr=strtok(NULL, " (),\n"))
{
printf("%s\n", ptr);
}
}
的第二个参数strtok()
是一个字符串,每个字符串都是我们希望提取的标记的分隔符。
对于给定的输入,输出将是
add
$t3
$s3
$s5
sh
$v0
8
$s0
推荐阅读
- angular - 从服务中获取当前元素(循环 Hook 问题)
- c++ - 如何确定任何语言的 UTF-8 字符串的 std::isgraph?
- jmeter - 字符串替换功能问题
- react-native - 如何防止在 React Native 中单击按钮时导航返回?
- c# - 如何同时运行两种方法?
- javascript - 捕获拒绝承诺并用错误代码将其转化为已解决的任何问题?
- android - 如何从适配器访问外部视图
- ruby-on-rails - 无法执行诸如“rails db:*”之类的命令
- php - 在控制器中创建和访问助手
- automation - 将 Rundeck 选项作为标签列表传递给 Ansible