-1

感谢您的帮助......但它仍然没有在屏幕上打印出 300,400。下面是我的完整代码:读取在命令提示符处传递的文件[文件包含:S(300,400)] 并读取其中包含的两个值,而不打印或读取 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 );
        }
    }
}
4

3 回答 3

4

你做的太复杂了。只需按字面意思包括非数字部分:

while(fscanf(file, "S(%d,%d)", &a, &b) == 2)
  printf("got S(%d,%d)\n", a, b);

另外,请注意printf()不支持模式,这没有多大意义。

于 2012-09-20T11:00:47.907 回答
2

对扫描集没有要求,只需使用:

while (2 == fscanf(file, "S(%d,%d)", &a, &b))
{
    printf("%d %d", a, b);
}

2与 的返回值进行比较,fscanf()因为发布的代码只能读取一个整数(仅fscanf()填充a和返回1),但错误地同时使用了aand b

于 2012-09-20T11:00:42.487 回答
0

我建议使用一个实用程序来解析和检查正则表达式。这是一个在线:http ://www.regextester.com/

还有很多其他...

于 2012-09-20T11:05:46.567 回答