2016-01-20 42 views
1

我正在從C函數獲取用戶的數字並將其轉換爲字符串,放在字符串的開頭 - +或無(如果爲0),而不是打印字符串的長度和字符串本身。所以可以說我輸入「123」,字符串將包含:'+','1','2','3','\ 0' ,它將打印:「數組長度爲4它包含+123" 有減,將打印只是同樣的事情 - 在開始(-123),並與0它不會打印任何東西(0)C閱讀字符串與fgets從1並保持0可用於閱讀

這就是我所做的代碼:

#define STRING_SIZE 100 

int main() 
{ 
    int num; 
    char sNum[STRING_SIZE] = {'\0'}, string[STRING_SIZE] = {'\0'}; 
    printf("%s", string); 
    scanf("%d", &num); 
    itoa(num, string, 10); 

    if (num < 0) { 
     sNum[0] = '-'; 
    } 
    else if (num > 0) { 
     sNum[0] = '+'; 
    } 
    strncpy (sNum, string, STRING_SIZE); 
    printf("\nThe string length is %d and contains the number: %s\n", strlen(sNum), sNum); 

    system ("PAUSE"); 
    return 0; 
} 

這是我的輸出,當我進入123:

字符串長度是3,並且包含數:123

回答

4

您複製了您在sNum中設置的字符。您需要複製第二個字符sNum,即&sNum[1]。另外請記得從string複製一個較少的字符。另請注意,有一種情況下strncpy不會附加終止符。

或者只是使用snprintf

snprintf(sNum, sizeof(sNum), "%+d", num); 
2
strncpy (sNum,string,STRING_SIZE); 

這將覆蓋原來的值(與符號)。使用strcat代替,但請確保sNum[1] == '\0'

事情是這樣的:

char sNum[STRING_SIZE + 1] = {'\0'}, string[STRING_SIZE] = {'\0'}; 

// ... 

if (num != 0) { 
    sNum[0] = (num < 0) ? '-' : '+';  
} 
strcat(sNum, string); 
+0

OP初始化'sNum'與'炭SNUM [STRING_SIZE] = { '\ 0'}',所以'SNUM [1] = 0全零;'線沒有必要。 – MC93

+1

@ MC93 - 確實,剛剛改變了 - 謝謝。 –

1

你並不需要將其轉換爲一個字符串檢查這個

#include <stdio.h> 

int main(void) 
{ 
    int value; 
    int length; 
    if (scanf("%d%n", &value, &length) != 1) 
     return -1; 
    if (value == 0) 
     printf("The string length is `1' and contains the number `0'\n"); 
    else 
     printf("The string length is `%d' and contains the number `%+d'\n", 
      length, value); 
    return 0; 
} 

說明:

  1. "%n"符在scanf()專賣店在length字符數scanf()閱讀。
  2. printf()"+"修飾符在正數前添加+,在負數前添加-。特殊值0單獨處理。
  3. 總是檢查返回值scanf()