我有這樣的任務。用戶以這種格式 (x;y;z) 輸入 3 個數字。我把它們當作一個字串,我需要將它們轉換成 3 個數字。我試圖這樣做很長時間了。我需要幫助,因為我不知道該怎么做。
輸入:22;33;55
輸出:Number1 = 22
編號 2 = 33
編號 3 = 55
最好的方法是使用字串。因為在這種情況下我有驗證。
bool Validation(char input[], int semicolon[]) {
int is_float = 0;
int is_semicolon = 0;
int is_char = 0;
for (int i = 0; i < strlen(input); i) {
if (!(input[i] >= '0' && input[i] <= '9')) {
if (input[i] == ';') {
is_semicolon;
}
else if (input[i] == '.') {
}
else {
is_char;
printf("Neteisingi duomenys.\nBuvo ivestas netinkamas simbolis.\n");
return false;
}
}
}
if (is_semicolon > 2 || is_semicolon == 0 || is_semicolon == 1) {
printf("Neteisingi duomenys.\nBuvo neteisingai atskirti duomenys kabliataskiais.\n");
return false;
}
if (is_semicolon == 2) {
for (int i = 0; i < 2; i) {
for (int j = 0; j < strlen(input); j) {
if (input[j] == ';') {
semicolon[i] = j;
printf("Duomenys ivesti teisingai.\n");
return true;
}
}
}
}
}
因此,如果我將輸入掃描為十進制,它對我不起作用。用strtol( )制作它的最簡單方法是什么?
uj5u.com熱心網友回復:
簡單的?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *s = "42;56;97";
if( strspn( s, ";0123456789" ) != strlen( s ) ) {
fprintf( stderr, "Bad data\n" );
return 1;
}
long n1 = strtol( s, &s, 10 );
// add check for *s == ';' if you think it appropriate
long n2 = strtol( s, &s, 10 );
// add check for *s == ';' if you think it appropriate
long n3 = strtol( s, &s, 10 );
// add check for *s == '\0' if you think it appropriate
printf( "%ld %ld %ld\n", n1, n2, n3 );
return 0;
}
42 56 97
uj5u.com熱心網友回復:
這是@MarcoBonelli 想法的實作:
#include <stdio.h>
int main(void) {
int number[3];
sscanf("22;33;55", "%d;%d;%d", number, number 1, number 2);
printf("number 1: %d, number 2: %d, number 3: %d\n", number[0], number[1], number[2]);
}
和輸出:
number 1: 22, number 2: 33, number 3: 55
如果您想撰寫一個決議器,它會更冗長但通用且易于擴展(在這種情況下決議語法:l(;l)*其中 l 是一個 long 和;您的分隔符)。它還說明了如何使用strtol():
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
const char *parse_ch(const char *s, char ch) {
if(!s || *s != ch)
return NULL;
return s 1;
}
const char *parse_long(const char *s, long *l) {
if(!s)
return NULL;
char *endptr;
*l = strtol(s, &endptr, 10);
if((*l == LONG_MIN || *l == LONG_MAX) && errno == ERANGE)
return NULL;
return endptr;
}
int main(void) {
const char *s = "22;33;55";
long l;
s = parse_long(s, &l);
if(!s) return 1;
printf("number: %ld\n", l);
for(;;) {
s = parse_ch(s, ';');
if(!s) return 0;
s = parse_long(s, &l);
if(!s) return 1;
printf("number: %ld\n", l);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512702.html
標籤:C类型转换字符串转换
