2016-05-06 35 views
3

一連の数字(つまり123456789)を入力し、一度に1つずつ出力する(つまり、1, 2, 3, ... , 9)。しかし、9の後、str[9]以降では、出力値は-48, 32, 9, -112のような乱数になります。最後に入力した番号が9だったので、出力番号が9で停止することを確認するにはどうすればよいですか?文字を整数に変換する

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

int main() 
{ 
    char str[100]; 
    int n,num[100]; 
    scanf("%s", str); 
    for(n=0;n<100;n++) 
    { 
     num[n] = str[n] - '0'; 
     printf("%d\n", num[n]); 
    } 
    return 0; 
} 
+2

あなたのループを停止すると、 'STR [N] == 0 ' –

+1

' N <100' --> 'N <100 && STR [N]'。 'str [8]'は '' 9 ''です。 – BLUEPIXY

+0

うわー、それはそれがすべてだった。ありがとう! –

答えて

0

あなたはscanfからの入力は、そのサイズを取得するためにstrlenを使用し、100未満の文字であるかもしれない文字列:

int main(void) 
{ 
    char str[100] = {0}; 
    int num[100]; 
    size_t len, n; 
    scanf("%s", str); 
    len = strlen(str); 
    for(n=0;n<len;n++) 
    { 
     num[n] = str[n] - '0'; 
     printf("%d\n", num[n]); 
    } 
    return 0; 
} 

はないint main()、あなたがint main(void)を使用する必要があります。

0
  • あなたは、あなたの長さの入力文字列を取るのstrlen(strの)を使用し、一つの変数にその値を格納する必要があり、文字列の長さまでのループを回転させます。それはそれだ:ここでは

  • 、私がやった:

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
char str[100] = {}; 
int n = 0,count = 0,num[100] = {}; 
scanf(" %s", str); 
count = strlen(str); 
for(n = 0; n < count; n++) 
{ 
    num[n] = str[n] - '0'; 
    printf("%d\n", num[n]); 
} 
return 0; 
} 
0

を使用すると、ASCII値を比較することができます。

#include<string.h> 
#include<stdio.h> 
int main(){ 
char str[100]; 
int n,num[100]=0; 
scanf("%s", str); 
while(str[n]<58 && str[n]>47){ 
    num[n] = n*num[n]+str[n]; 
n++; 
} 
printf("%d\n", num[n]); 
return 0; 

}

0

一度に代わりの文字列として文字一度入力を処理する必要があるように思えます。これは、一見無作為な100文字の制限が不要になります。文字が印刷前の桁であることを確認し、最初に検出された桁がないときにループを終了させることができます。

#include <ctype.h> 
char c; 
scanf("%c", c); 
while (isdigit(c)) 
{ 
    printf("%c\n", c); 
} 
関連する問題