2012-12-17 69 views
0

下面的程序編譯,但有這裏面胡言亂語數據並不會取代..爲什麼這個字符替換程序不起作用?

#include <stdio.h> 
#include <string.h> 

int main (void) 
    { 
    int i; 
    char string[100]; 
    printf("Enter a string"); 
    fgets(string, 100, stdin); 
    for (i=0; i<strlen(string);i++) 
    { 
     if (string[i]=='o') 
     { 
      string[i]='0'; 

     } 

    } 
    printf("%c", string); 
    return 0; 
} 
+5

你是不是指'%s'? –

+0

總的來說,如果你能解釋什麼是「亂碼數據」會是一件好事。例如,示例會話(顯示一些輸入,預期輸出和實際輸出)將是一個開始。 –

回答

1

計算strlen的循環之前

使用%S代替%C

printf("%s", string); 

由於Vallabh Patade建議您不需要計算長度:

char *p, string[100]; 

printf("Enter a string"); 
p = fgets(string, 100, stdin); 
while (*p) { 
    if (*p == 'o') *p = '0'; 
    p++; 
} 
printf("%s", string); 
+2

爲什麼需要計算長度?你能解釋一下嗎? –

+0

他爲每次迭代都調用strlen,但很明顯while(* string)是一個更好的選項 –

+0

編譯器不會優化它,當然不會每次迭代調用它嗎? – 2012-12-17 12:35:15

1

1)改變

printf("%c", string); 

printf("%c", string[i]); 

在循環內OR

2)從環中刪除&其添加

printf("%s", string); 

在循環之後。

0

如果還有其他問題,我不會介意。只有聲明應改爲

printf("%s", string); 

因爲我們正在打印字符串。也許字符串保持所需的輸出,只是我們打印錯誤的方式。

相關問題