如何检查字符串是否是无效输入

时间:2017-09-20 01:01:26

标签: c

我是新手,所有的帮助都会受到赞赏,即使它只是将我链接到另一个论坛。

我正在写一个非常基本的程序,我正在拿一个7位数的电话号码,并在例如之间放置一个“ - ”。 “1234567”至“123-4567”

我打算先查看用户的电话号码是否为7位数,如果没有,或者输入的数字以外还有其他字符我想显示“无效输入”并重新提问< / p>

感谢您的帮助!

#include <stdio.h>

int main()
{
   char phoneNum[6];

   printf("Enter your phone number\n: ");
   scanf("%s", phoneNum);


   printf("Your Phone Number: %.3s", phoneNum);
   printf("-%.4s", phoneNum + 3);

   return(0);
}

2 个答案:

答案 0 :(得分:0)

要存储7个字符的字符串,字符数组大小必须至少为8才能存储7个字符,\0字符用于标记字符串的结尾。 如果您打算将修改后的字符串与-存储在同一个数组中,则大小必须至少为9.

char phoneNum[9];

用户可能输入超过7个字符会导致溢出。

尝试

scanf("%7s", phoneNum);

要查找字符串是否都是数字,请使用循环

for(i=0; phoneNum[i]!='\0'; ++i)
{
    if(!isdigit(phoneNum[i]))
    {
        break;
    }
}
if(phoneNum[i]!='\0')
{
    printf("\nInvalid input.");
}

要查找字符串的长度,请使用strlen()

要在字符串的第3个索引处插入-,您必须将所有索引从该索引转移到字符串的结尾(包括\0字符)。

for(i=8; i>3; --i)
{
    phoneNum[i]=phoneNum[i-1];
}
phoneNum[3]='-';

答案 1 :(得分:0)

  

我打算先查看用户的电话号码是否为7位数,如果没有,或者是否输入了除号码以外的任何其他字符。

避免使用for row in range(5): print('\n' + '-'*50, end = "\n|") for col in range(5): print(' {:<5}{:<3}'.format(row, col), end = '|', sep="|") print('\n' + '-'*50) 。它不会限制读取的数量,不会读取整个(错过空格),并将行-------------------------------------------------- | 0 0 | 0 1 | 0 2 | 0 3 | 0 4 | -------------------------------------------------- | 1 0 | 1 1 | 1 2 | 1 3 | 1 4 | -------------------------------------------------- | 2 0 | 2 1 | 2 2 | 2 3 | 2 4 | -------------------------------------------------- | 3 0 | 3 1 | 3 2 | 3 3 | 3 4 | -------------------------------------------------- | 4 0 | 4 1 | 4 2 | 4 3 | 4 4 | -------------------------------------------------- 留在scanf("%s", phoneNum);中。

为作业使用足够大的缓冲区。不需要小气。建议缓冲2倍预期需求。

'\n'