2013-10-14 30 views
0

我有一個非常簡單的程序。c + +中的scanf和字符串

#include <stdio.h> 
#include <string> 
using namespace std; 
struct scholar{ 
    int number; 
    string fam; 
    int ocen; 
}; 


int main(){ 
    int len; 

    printf("vvedite n"); 
    scanf("%d", &len); 
    scholar *barr= new scholar[len]; 

    for(int i=0; i<len; i++){ 
     printf("Nomer studenta "); 
     scanf("%d", &barr[i].number); 
     printf("\nFamilia "); 
     scanf("%s", barr[i].fam); 
     printf("\nOcenka"); 
     scanf("%d", &barr[i].ocen); 
    } 
     delete [] bar; 

但上線,在這裏我想輸入的家庭,有一個警告:

warning: format specifies type 'char *' but the argument has type 'string' 
(aka 'basic_string<char>') [-Wformat]. 

任何建議如何解決呢?

+1

使用'std :: cin'和'std :: vector'而不是'scanf'和一個指針。 – chris

回答

1

您不能scanfstd::string,C函數不知道C++實現是什麼。你可以使用std::getline

#include <string> 
#include <iostream> 

std::getline(std::cin, barr[i].fam); 

另外,不要用C++代碼混合C代碼,並應避免new如果可能的話,使用的scholar矢量代替。對於樣本:

std::vector<scholar> barr; 
+0

謝謝你的幫助,但我不得不使用簡單的數組而不是矢量。另外,我需要在1行中輸入所有3個東西(number,fam和ocen),我知道如何用1個scanf來完成,但是我怎樣才能用2個scanf和1個getline?先謝謝你。 – ratkke

+0

請參閱http://en.cppreference.com/w/cpp/string/basic_string/getline – billz

0

「的scanf」在stdio.h這是一個C庫不是C++庫的定義,所以你的可能改變 類型「字符*」到「字符串」自動。您可以使用其他輸入IO流功能而不是'scanf'。