如何从 C lang 中的字符串(char 数组)中删除所有数据?
How can I delete all data from string (char array) in C lang?
我正在扫描一个字符串,我希望该字符串只是整数类型的元素,所以我对它做了一些验证,它适用于字符,但它对浮点数来说不够好。例如如果我输入 1.2 值作为输入,那么它不需要单个数字的输出并且适用于 2 位和更多。同样,如果我输入 12.3,那么它不需要两位数的输出,而适用于 3 位或更多位。谁能告诉我这里发生了什么?有什么办法可以删除字符串中输入的所有元素,以便只能获取整数值?
P.S。我正在使用字符串,因为我需要根据给定的程序问题从字符串中获取数字输入。
printf("Enter the number you want to convert into words:\n\n-->");
gets(numberToBeConvertedToWords);
for (i = 0; i != strlen(numberToBeConvertedToWords); i++)
{
while (isdigit(numberToBeConvertedToWords[i]) == 0)
{
// deleting the characters entered in the string.
memset(numberToBeConverted, 0, sizeof(numberToBeConverted));
printf("Please enter positive integers only.\n\n-->");
gets(numberToBeConvertedToWords);
}
}
printf("Entered number: %d", numberToBeConvertedToWords);
convertAndPrintNumberToWords(numberToBeConvertedToWords);
按书面回答问题:
How can I delete all data from string (char array) in C lang?
执行此操作的典型方法是将字符串的每个字符设置为零。最简单的方法是使用 memset,假设您知道字符串有多少有效内存。
//Safe, because we know the length of the string
char s[100];
memset(s, 0, 100);
//Only safe if the string is correctly null-terminated
char* s = getSomeString();
memset(s, 0, strlen(s));
解决隐含的问题:
您实际上想问的问题似乎是 "why does my code not do what I expect?"。模糊 "help me" 问题通常与 Stack Overflow 无关。如果您可以就您的问题提出具体问题,您会得到更好的答复。在这种特定情况下,获得 'incorrect' 输出会很有帮助,因为很难理解意外行为到底是什么。
但是,我猜测您编辑的代码没有按照您的预期运行的原因是 while
位于一个奇怪的地方。如果遇到 '.',isdigit
将 return 0 并且您将正确擦除字符串。但是,您随后在 while 循环 中得到一个新字符串 ,这意味着您从 当前位置 开始验证新字符串,而不是开始字符串。
您可能想将 while 循环移到 for 循环之外:
BOOL valid = true;
do
{
gets(numberToBeConvertedToWords);
// reassigning the bool value as "true" so that loop does not to go infinite
// loop just in case if it's changed from 'if' block.
valid = true;
for (i = 0; i != strlen(numberToBeConvertedToWords); i++)
{
if(!isdigit(numberToBeConvertedToWords[i]))
{
// deleting the characters entered in the string.
memset(numberToBeConverted, 0, sizeof(numberToBeConverted));
printf("Please enter positive integers only.\n\n-->");
valid = false;
break;
}
}
} while(!valid);
我正在扫描一个字符串,我希望该字符串只是整数类型的元素,所以我对它做了一些验证,它适用于字符,但它对浮点数来说不够好。例如如果我输入 1.2 值作为输入,那么它不需要单个数字的输出并且适用于 2 位和更多。同样,如果我输入 12.3,那么它不需要两位数的输出,而适用于 3 位或更多位。谁能告诉我这里发生了什么?有什么办法可以删除字符串中输入的所有元素,以便只能获取整数值?
P.S。我正在使用字符串,因为我需要根据给定的程序问题从字符串中获取数字输入。
printf("Enter the number you want to convert into words:\n\n-->");
gets(numberToBeConvertedToWords);
for (i = 0; i != strlen(numberToBeConvertedToWords); i++)
{
while (isdigit(numberToBeConvertedToWords[i]) == 0)
{
// deleting the characters entered in the string.
memset(numberToBeConverted, 0, sizeof(numberToBeConverted));
printf("Please enter positive integers only.\n\n-->");
gets(numberToBeConvertedToWords);
}
}
printf("Entered number: %d", numberToBeConvertedToWords);
convertAndPrintNumberToWords(numberToBeConvertedToWords);
按书面回答问题:
How can I delete all data from string (char array) in C lang?
执行此操作的典型方法是将字符串的每个字符设置为零。最简单的方法是使用 memset,假设您知道字符串有多少有效内存。
//Safe, because we know the length of the string
char s[100];
memset(s, 0, 100);
//Only safe if the string is correctly null-terminated
char* s = getSomeString();
memset(s, 0, strlen(s));
解决隐含的问题:
您实际上想问的问题似乎是 "why does my code not do what I expect?"。模糊 "help me" 问题通常与 Stack Overflow 无关。如果您可以就您的问题提出具体问题,您会得到更好的答复。在这种特定情况下,获得 'incorrect' 输出会很有帮助,因为很难理解意外行为到底是什么。
但是,我猜测您编辑的代码没有按照您的预期运行的原因是 while
位于一个奇怪的地方。如果遇到 '.',isdigit
将 return 0 并且您将正确擦除字符串。但是,您随后在 while 循环 中得到一个新字符串 ,这意味着您从 当前位置 开始验证新字符串,而不是开始字符串。
您可能想将 while 循环移到 for 循环之外:
BOOL valid = true;
do
{
gets(numberToBeConvertedToWords);
// reassigning the bool value as "true" so that loop does not to go infinite
// loop just in case if it's changed from 'if' block.
valid = true;
for (i = 0; i != strlen(numberToBeConvertedToWords); i++)
{
if(!isdigit(numberToBeConvertedToWords[i]))
{
// deleting the characters entered in the string.
memset(numberToBeConverted, 0, sizeof(numberToBeConverted));
printf("Please enter positive integers only.\n\n-->");
valid = false;
break;
}
}
} while(!valid);