2016-07-08 36 views
0

我有一個項目要做哪些要求我根據用戶的輸入兩個向量的地址記錄到一個雙陣列。然而。例如,如果用戶寫如何使用scanf的掃描雙和焦炭在同一時間到雙陣列用C

3 
1 2 3 
3 4 5 

這意味着矢量是3維和兩個向量(1,2,3)(3,4,5)。如果用戶寫入,

2 
1 2 
2 3 

這意味着矢量是二維和兩個向量(1,2)(2,3)。我需要將這兩個向量的座標記錄到兩個雙數組x和y中。我如何使用scanf將座標讀入這兩個數組? (我不知道,如果用戶以正確的格式寫,有可能爲他們寫在那裏他們應該只寫數字的地方字母或其他符號。如果他們寫的比許多其他字符,我需要返回。 - 1)

到目前爲止我的代碼是

double x[100]; 
char c; 
c = getchar(); 
do { 
scanf("%lf",x)} 
while (c!= '\n'); 
+2

不能檢測並從'scanf'惡意的用戶輸入恢復。考慮使用'fgets'來代替。 – melpomene

+0

,因爲我以前建議你應該用'strtok()'來標記params將整行代碼分解爲標記,並將它們轉換爲浮動槽'atof()'。 正如** melpomene **所示,使用'stdin'中的'gets()'。 – weirdgyn

+0

但我需要使用scanf來解決這個問題。是否有可能將所有內容(double和char)存儲到數組中,然後檢查數組中的元素是否爲數字? –

回答

0

據我理解您的問題,這裏是一個應該解決的一個代碼。

#include <stdio.h> 
#include <stdlib.h> 
#define NB_VECTORS 2 //Increase if you have more than 2 vectors 

int* readVector(int size) { 
    // Allocation fits the size 
    int* vector = malloc(size*sizeof(int)); 
    //While the vector are the same size it works 
    for (int i = 0; i < size; i++) 
     if (scanf("%d", vector+i) != 1) 
      return null; //bad input 
    return vector; 
} 

int main(int argc, char** argv) { 
    int size; 
    scanf("%d", &size); 

    //Each line is vectorized inside vectors[i] 
    int* vectors[NB_VECTORS];# 
    for (int i = 0; i < NB_VECTORS; i++) 
     vectors[i] = readVector(size); 

    return 0; 
} 

[編輯] 回報,它盛滿物品的數量 - > CF http://www.cplusplus.com/reference/cstdio/scanf/

+0

只是一個簡單的問題,「int * readVector(int size)」中的「int size」是什麼? –

+0

它是數組的大小嗎? –

+0

是的,它是數組的大小 –

0

scanf不解析用戶輸入的功能良好。它接受2.1sdsa2作爲值爲2.1的浮點數,它接受2.1sdsa2作爲值爲2的整數。只有當您知道輸入有效時才應使用scanf

如果你需要使用scanf,可以掃描到一個字符串,然後寫自己的解析,以檢查輸入有效。

一個簡單的例子:

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

int main(void) 
{ 
    char s[10]; 
    while (1 == scanf("%s", s)) 
    { 
    printf("%s\n", s); 
    if (strcmp(s, "s") == 0) break; 
    } 
    return(0); 
} 

該程序繼續進行,直到輸入輸出的s

實施例:

1 2.0 2.6 
1 
2.0 
2.6 
2a 4567 2.a23 
2a 
4567 
2.a23 
s 
s 

注意scanf當它看到的空間的回報。所以輸入1 2 3將是3個循環(又名3個子字符串返回)。

因此而不是隻打印,你可以把你的解析器while內:

while (1 == scanf("%s", s)) 
    { 
     // Parse the string s and add value to array 
    } 
0

也許你只需要像這樣(簡單的,最小的,沒有錯誤檢查爲例):

int main() 
{ 
    int x[3], y[3]; 

    int dimension; 
    scanf("%d", &dimension); 

    if (dimension == 3) 
    { 
    scanf("%d %d %d", &x[0], &x[1], &x[2]); 
    scanf("%d %d %d", &y[0], &y[1], &y[2]); 
    } 
    else if (dimension == 2) 
    { 
    scanf("%d %d", &x[0], &x[1]); 
    scanf("%d %d", &y[0], &y[1]); 
    } 

    ... 
    return 0; 
}