69,373
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define SIZE 16
int main(int argc, char **argv)
{
char b[SIZE] = {0}, c[SIZE] = {0}, ch[SIZE] = {0};
int i = 0;
printf("请输入:");
while((ch[i] = getchar()) != ' ')
{
/// 回车符也会被读入,去掉回车符
if ('\n' == ch[i])
{
continue;
}
strcpy(b, ch);//第一处
/// 判断是否是数字
//if((ch[i] < 47) || (ch[i] > 58))
if(!isdigit(ch[i]))
{
i = -1;
printf("错误,含有非法字符,请重新输入\n");
printf("请输入:");
}
i++;
}
strcpy(c, ch);//第二处
/// 打印b的相关信息
for (i = 0; i < SIZE; i++)
{
printf("|%c| ", b[i]);
}
printf("\n");
puts(b);
/// 打印c的相关信息
for (i = 0; i < SIZE; i++)
{
printf("|%c| ", c[i]);
}
printf("\n");
puts(c);
return 0;
}
//拿12345a678举例
//这里可以输入1,回车;2,回车。。。8,回车;空格,回车。也可以输入12345a678空格,回车,道理一样
/*
* while循环里输入数字时:
* 输入1时,字符串ch为1,拷到b中,b为1;输入2时,字符串ch为12,拷到b中,覆盖原来b中的值,b为12;之后类似。
*
* 1. 输入12345后,都不会执行while里的if判断语句内的语句,此时b和ch均为:12345;
* 2. 输入字符a时,不是数字,则进入while里的if判断,i的值变为-1,此时b和ch均为:12345a,之后i++,i值为0;
* 3. 输入6时,由于i为0,所以ch[i]即为ch[0],原来的ch[0]是1,现在重新赋值为6,i++;
* 4. 输入78时,道理同3,7和8分别覆盖原来的ch[1]和ch[2],此时b和ch均为:67845a,i的值为3;
* 5. 输入空格时,i = 3,ch[3]的值为空格,跳出循环,此时b的值依然为:67845a,字符串ch的值为:678 5a(原来ch[3]的值为4,现在被重新赋值为空格);
* 6. 执行strcpy(c, ch);,字符串c的值为字符串ch的值,即:678 5a
*/
(省略部分不重要的输出信息)
输入:12345a678 (最后一个字符是空格,输入别超过SIZE大小个字符)
输出:
|6| |7| |8| |4| |5| |a| || || || || || || || || || ||
67845a
|6| |7| |8| | | |5| |a| || || || || || || || || || ||
678 5a
int main()
{
char arr[16] = {0};
int i = 0;
strcpy(arr, "abcdei");
strcpy(arr, "abcdefghi");
strcpy(arr, "abcd");
for (i = 0; i < 16; i++)
{
printf("|%c| ", arr[i]);
}
printf("\n");
puts(arr);
return 0;
}
最后输出结果:
|a| |b| |c| |d| || |f| |g| |h| |i| || || || || || || ||
abcd