感谢您的帮助......但仍然无法在屏幕上打印出300,400。下面是我的完整代码:读取一个文件[文件包含:S(300,400)]在commandprompt传递并读取其中包含的两个值而不打印或读取S,第一个括号,逗号或最后一个右括号
#include <stdio.h>
int a;
int b;
int main ( int argc, char *argv[] )
{
if ( argc != 2 ) /* argc should be 2 for correct execution */
{
/* We print argv[0] assuming it is the program name */
printf( "usage: %s filename", argv[0] );
}
else
{
// We assume argv[1] is a filename to open
FILE *file = fopen( argv[1], "r" );
/* fopen returns 0, the NULL pointer, on failure */
if ( file == 0 )
{
printf( "Could not open file\n" );
}
else
{
/*reading file..
while (fscanf(file, "S(%d,%d)", &a, &b) == 2)
{
printf("%d,%d", a, b);
}
fclose( file );
}
}
}
答案 0 :(得分:4)
你做得太复杂了。只需在字面上包含非数字部分:
while(fscanf(file, "S(%d,%d)", &a, &b) == 2)
printf("got S(%d,%d)\n", a, b);
另外,请注意printf()
不支持模式,这没有多大意义。
答案 1 :(得分:2)
不需要扫描集,只需使用:
while (2 == fscanf(file, "S(%d,%d)", &a, &b))
{
printf("%d %d", a, b);
}
将2
与fscanf()
的返回值进行比较,因为发布的代码只能读取一个整数(仅fscanf()
填充a
并返回1
)但错误地同时使用a
和b
。
答案 2 :(得分:0)
我建议使用实用程序来解析和检查正则表达式。这是一个在线:http://www.regextester.com/
还有很多其他人......