69,373
社区成员
发帖
与我相关
我的任务
分享
#pragma warning(disable:4996)
#include<stdio.h>
int main()
{
char str1[30], str2[30];
printf("please enter string:");
gets(str1);
printf("which character that begin to copy? ");
int m;
scanf("%d", &m);
void str_c(char x[], char y[], int n);
str_c(str1, str2, m);
printf("%s\n", str2);
return 0;
}
void str_c(char x[], char y[], int n)
{
int i;
for (i = n; i != '\0'; i++)
{
y[i - n] = x[i];
}y[i - n] = '\0';
}
#pragma warning(disable:4996)
#include<stdio.h>
int main()
{
char str1[20], str2[20];
char*p1 = &str1[0], *p2 = &str2[0];
scanf("%s", str1);
gets(str2); //这样写只能输入一次就输出了,改成scanf正常。单独用gets又正确。
int x;
int strcmp(char*x, char*y);
x = strcmp(p1, p2);
printf("%d\n", x);
return 0;
}
int strcmp(char*p1, char*p2)
{
int i = 0;
while (*(p1 + i) == *(p2 + i))
{
if (*(p1 + i) == '\0')return 0;
i++;
}
return(*(p1 + i) - *(p2 + i));
}
[/quote]
这是因为gets遇到回车就返回,这个回车是上面输入str1留在输入缓存里的,在scanf("%s", str1);后面加一句getchar();就可以,加这句的作用就是接收(吸收)上次输入残留在输入缓冲区里的回车符[/quote]
谢谢您了,#pragma warning(disable:4996)
#include<stdio.h>
int main()
{
char str1[20], str2[20];
char*p1 = &str1[0], *p2 = &str2[0];
scanf("%s", str1);
gets(str2); //这样写只能输入一次就输出了,改成scanf正常。单独用gets又正确。
int x;
int strcmp(char*x, char*y);
x = strcmp(p1, p2);
printf("%d\n", x);
return 0;
}
int strcmp(char*p1, char*p2)
{
int i = 0;
while (*(p1 + i) == *(p2 + i))
{
if (*(p1 + i) == '\0')return 0;
i++;
}
return(*(p1 + i) - *(p2 + i));
}
[/quote]
这是因为gets遇到回车就返回,这个回车是上面输入str1留在输入缓存里的,在scanf("%s", str1);后面加一句getchar();就可以,加这句的作用就是接收(吸收)上次输入残留在输入缓冲区里的回车符#pragma warning(disable:4996)
#include<stdio.h>
int main()
{
char str1[20], str2[20];
char*p1 = &str1[0], *p2 = &str2[0];
scanf("%s", str1);
gets(str2); //这样写只能输入一次就输出了,改成scanf正常。单独用gets又正确。
int x;
int strcmp(char*x, char*y);
x = strcmp(p1, p2);
printf("%d\n", x);
return 0;
}
int strcmp(char*p1, char*p2)
{
int i = 0;
while (*(p1 + i) == *(p2 + i))
{
if (*(p1 + i) == '\0')return 0;
i++;
}
return(*(p1 + i) - *(p2 + i));
}
#pragma warning(disable:4996)
#include<stdio.h>
void str_c(char x[], char y[], int n);
int main()
{
char str1[30], str2[30];
int m;
printf("please enter string:");
fgets(str1, 30, stdin);
printf("which character that begin to copy? ");
scanf("%d", &m);
str_c(str1, str2, m);
printf("%s\n", str2);
return 0;
}
void str_c(char x[], char y[], int n)
{
int i;
for (i = n; x[i]; i++)
y[i - n] = x[i];
y[i - n] = '\0';
}
建议两点:
1. 函数声明放在main函数外,这样更符合代码规范;
2. 用fgets替换gets更安全。
for (i = n; i != '\0'; i++)
//改为
for (i = n; x[i] != '\0'; i++)