我在使用将字符串存储到2d数组时遇到麻烦scanf
。
为了说明这一点,这是程序接受的输入:
p2/src/stuff:5:
p3/src/stuff:5:
p4/src/stuff:6:
因此,我希望能够用冒号将字符串和数字分开并分别存储。因此,理想情况下,我的2d数组对于字符串如下所示:
[["p2/src/stuff"], ["p3/src/stuff"], ["p4/src/stuff"]]
数字可以存储在一维数组中。
这是我到目前为止的内容:
int main() {
char *str;
char *i;
int n = 1;
while (n == 1) {
n = scanf("%m[^':']:%m[^':']:", &str, &i);
}
printf("# inputs read: %d\n", n);
printf("%s\n", str);
printf("%s\n", i);
}
在这里,它仅打印第一行:
p2/src/stuff
5
我应该有一个使用剂量指针算法的迭代器吗?我对指针算法不熟悉。
scanf
返回扫描的项目数。在这种情况下,它将是2而不是1。这里返回1表示扫描期间出现问题。
该%m
说明符分配内存的指针。使用一对指针,应该在循环的每次迭代中释放它们。您可以使用一个指针数组来存储每个输入。
scanset不需要单引号[^':']
。如果要扫描不是冒号的所有字符,则[^:]
可以使用。
EOF将终止while循环,因此,如果您正在从文件读取,它将停止在文件末尾。可以使用Ctrl + D(Linux)或Ctrl + Z(Windows)终止从stdin的读取。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char *str;
char *i;
int n;
while ( ( n = scanf("%m[^:]:%m[^:]:", &str, &i)) == 2) {
printf("# inputs read: %d\n", n);
printf("%s\n", str);
printf("%s\n", i);
free ( str);
free ( i);
}
return 0;
}
编辑:
这使用了一个指针数组来收集str和i数组的多个输入。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char *str[10];// array of pointers
char *i[10];
int each = 0;
int loop = 0;
int n = 0;
while ( ( n = scanf("%m[^:]:%m[^:]:", &str[each], &i[each])) == 2) {
printf("# inputs read: %d\n", n);
printf("%s\n", str[each]);
printf("%s\n", i[each]);
each++;
if ( each > 9) {
break;//too many inputs for array size
}
}
for ( loop = 0; loop < each; loop++) {
printf ( "str[%d]=%s\n", loop, str[loop]);//print all the str inputs
}
for ( loop = 0; loop < each; loop++) {
printf ( "i[%d]=%s\n", loop, i[loop]);//print all the i inputs
}
for ( loop = 0; loop < each; loop++) {//free memory
free ( str[loop]);
free ( i[loop]);
}
return 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句