2016-10-21 66 views
0

我正在嘗試提示用戶輸入一個數字,然後提取他們輸入的數字,並且總計他們輸入的數字的數字。他們只能輸入一次號碼。我的代碼如下:來自單個輸入的多個scanf

printf("\nPART 2: EXPRESSIONS SUM\n\n"); 
    printf("Enter 5-digit integer: "); 
    scanf("\n%1d%1d%1d%1d%1d", &dig_one, &dig_two, &dig_three, &dig_four, &dig_five); 
    scanf("\n%d", &five_dig_int) 

但是,在第一次scanf完成後,程序掛在第二個scanf上等待更多輸入。有沒有辦法「重新掃描」,以便在初始輸入時說話,以便用戶不必再次輸入號碼?謝謝! ;

+1

你可以用'fgets'或者'scanf'作爲整行讀取用戶的輸入,然後使用'sscanf'多次掃描該字符串。 –

+1

有趣的是,我會試一試。所以它看起來像沒有辦法做到這一點只使用scanf正確?因爲一旦輸入被「吃掉」就可以這麼說了。 – Froobyflake

+0

或者,我可以讓scanf獲取數字,然後將它們連接在一起形成一個字符串並將其轉換爲完整的5位數int?如果我想要走這條路,我該怎麼做? – Froobyflake

回答

0

使用字符串&的atoi()

例子:

#include <stdio.h> 
#include <stdlib.h> 
int main(void) 
{ 
    char str[6]; 
    printf("\nPART 2: EXPRESSIONS SUM\n\n"); 
    printf("Enter 5-digit integer: "); 
    scanf("\n%s, &str); 
    int fivedigit = atoi(str); 
    int sum = 0; 
    for(int i = 0; i < 5; i++) 
    { 
     int tempadd = (int) str[i]; 
     sum += tempadd; 
    } 
    //Do stuff with both values 



} 
0

不難總結底座的任意整數的10位有位算術:

#include <stdio.h> 

int main(void) { 
    int val; 
    printf("Enter a number: "); 
    if (scanf("%d", &val) != 1) return 1; 
    int sum = 0; 
    for (int x = val; x; x /= 10) sum += x % 10; 
    printf("Value = %d. Digit sum = %d\n", val, sum); 
    return 0; 
}