使用sscanf检索整数

时间:2014-12-03 22:22:20

标签: c++ string integer scanf

#include <stdio.h>
#include <iostream.h>
#include <string.h>
int main()
{
    char P_input[101];
    int Bug_Time[10][4];
    int Tot_Time[4];
    char rimp[10];
    cout<<"Enter Total time:"<<endl;
    cin.getline(P_input,100);
    cout<<P_input<<endl;
    sscanf(P_input, "%d Days - %d - Hours - %d - Minutes - %d Seconds", Tot_Time[0],Tot_Time[1],Tot_Time[2],Tot_Time[3]);
    cout<<Tot_Time[0]<<Tot_Time[1]<<Tot_Time[2]<<Tot_Time[3]<<endl;
    return 0;
}

返回输出

> Enter Total time:
> 0 Days - 0 - Hours - 26 - Minutes - 56 Seconds //I entered this 
> 0 Days - 0 - Hours - 26 - Minutes - 56 Seconds // It showed me this 
> 1576 1558 0 7762 //Final cout

有人可以帮我解决这个问题。我希望它显示“0 0 26 56”

2 个答案:

答案 0 :(得分:3)

sscanf(P_input, "%d Days - %d - Hours - %d - Minutes - %d Seconds", Tot_Time[0],Tot_Time[1],Tot_Time[2],Tot_Time[3]);

sscanf函数来自C API,不使用引用。所有参数都按值传递,并且所有整数都未初始化,因此将它们的值传递给sscanf()并没有任何意义。你需要通过指针传递它们。

答案 1 :(得分:1)

sscanf()期望int说明符的{strong>指针为%d。但是,您没有将指针传递给整数。呼叫需要看起来像这样:

sscanf(P_input, "%d Days - %d - Hours - %d - Minutes - %d Seconds", &Tot_Time[0], &Tot_Time[1], &Tot_Time[2], &Tot_Time[3]);

此外,您的最终cout不会在数字之间输出空格,就像您说的那样:

cout << Tot_Time[0] << ' ' << Tot_Time[1] << ' ' << Tot_Time[2] << ' ' << Tot_Time[3] << endl;