[英]scan n numbers without spaces in C
假設在一行中輸入 n 個數字,沒有任何空格,條件是這些數字服從它們位於 1 和 10 之間的條件。
假設 n 是 6 ,然后讓輸入像 "239435" 那么如果我有一個數組來存儲這些數字,那么我應該得到
array[0]=2
array[1]=3
array[2]=9
array[3]=4
array[4]=3
我可以通過使用array[0]=(input/10^n)
然后下一個數字來獲得上述結果,但有沒有更簡單的方法來做到這一點?
您可以使用字符串來獲取輸入,然后檢查每個位置並提取它們並存儲在數組中。 您需要明確檢查每個位置的數值,因為您將輸入作為字符串接受。 對於作為字符串輸入的整數,不能保證輸入是純數字,如果不是,事情可能會變得瘋狂。
檢查此代碼
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char ipstring[64];
int arr[64];
int count, len = 0;
printf("Enter the numbersi[not more than 64 numbers]\n");
scanf("%s", ipstring);
len = strlen(ipstring);
for (count = 0; count < len ; count++)
{
if (('0'<= ipstring[count]) && (ipstring[count] <= '9'))
{
arr[count] = ipstring[count] - '0';
}
else
{
printf("Invalid input detectde in position %d of %s\n", count+1, ipstring );
exit(-1);
}
}
//display
for (count = 0; count < len ; count++)
{
printf("arr[%d] = %d\n", count, arr[count]);
}
return 0;
}
只需為每個數字減去0
的 ASCII 碼,就可以得到它的值。
char *s = "239435"
int l = strlen(s);
int *array = malloc(sizeof(int)*l);
int i;
for(i = 0; i < l; i++)
array[i] = s[i]-'0';
更新
假設0
不是有效輸入並且只允許 1-10 之間的數字:
char *s = "239435"
int l = strlen(s);
int *array = malloc(sizeof(int)*l);
int i = 0;
while(*s != 0)
{
if(!isdigit(*s))
{
// error, the user entered something else
}
int v = array[i] = *s -'0';
// If the digit is '0' it should have been '10' and the previous number
// has to be adjusted, as it would be '1'. The '0' characater is skipped.
if(v == 0)
{
if(i == 0)
{
// Error, first digit was '0'
}
// Check if an input was something like '23407'
if(array[i-1] != 1)
{
// Error, invalid number
}
array[i-1] = 10;
}
else
array[i] = v;
s++;
}
例如
int a[6];
printf(">");
scanf("%1d%1d%1d%1d%1d%1d", a,a+1,a+2,a+3,a+4,a+5);
printf("%d,%d,%d,%d,%d,%d\n", a[0],a[1],a[2],a[3],a[4],a[5]);
結果:
>239435
2,3,9,4,3,5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.