2017-04-10 106 views
-1

我一直在試圖編寫一個程序,它會讀取空格分隔整數的序列,直到遇到換行符爲止。我的方法是將輸入讀爲字符串,並使用atoi()將字符串轉換爲整數。 這是我的方法:如何讀取空格分隔整數的序列,直到遇到換行符爲止?

#include<stdio.h> 
#include<stdlib.h> 
#include<ctype.h> 

int main() 
{ 
int a[100],i=0,k=0; 
char s[100]; 

//Read the first character 
scanf("%c",&s[i]); 

//Reads characters until new line character is encountered 
while(s[i]!='\n'){ 
    i+=1; 
    scanf("%c",&s[i]); 
} 

//Print the String 
printf("\nstring = %s\n",s); 

//Trying to convert the characters in the string to integer 
for(i=0;s[i]!='\0';i++){ 
    if(isdigit(s[i])) 
    { 
     a[k] = atoi(s); 
     k+=1; 
    } 
} 

//Printing the integer array 
for(i=0;i<k;i++) 
printf("%d ",a[i]); 
return 0; 
} 

但是,當我進入輸入1 2 3 4輸出1 1 1 1。我只想讀取字符串並將輸入的字符串的字符轉換爲Integer數組的條款a[0] = 1 a[1] = 2 a[3]= 3 a[4] = 4。我可能認爲a[k] = atoi(s)會引用字符串中的第一個元素,但不會引用其他元素。因此,每次迭代都會分配a[k] = 1。獲得期望的結果?

在此先感謝。

+2

使用'與fgets()'和'的strtok()',更好的和強大的。 –

+0

是否有最大線長? –

+1

我猜整數的數量是在一定的範圍內,但不是字符串的長度@Michael Walz –

回答

0

這可能會幫助你

#include <stdio.h> 

int main() { 
    const int array_max_size = 100; 
    char symb; 
    int arr[array_max_size]; 
    int array_current_size = 0; 
    do { 
     scanf("%d%c", &arr[array_current_size++], &symb); 
    } while (symb != '\n'); 

    // printing array 

    return 0; 
} 
+1

這會得到像''123 456 \ n「'這樣的輸入被愚弄,因爲它假定'\ n'直接跟在數字 – chux

+0

對不起在換行符之前應該提到直接跟在數字之後。但是如上所述,如果輸入可以在空格後面輸入換行符,我應該怎麼做? @chux –

+0

@ Lingesh.K 1)用一個寬大的緩衝區大小的'fgets()'讀一行,然後解析'int'或2)'scanf()'和'ungetc()'[例子](http://stackoverflow.com/a/31845914/2410359) – chux

相關問題