我需要制作一个在命令行接受不少于 2 个且不多于 6 个参数的程序,然后打印出第一个或第二个字符 例如:asdf asdf asdf asdf 打印出来为:a s a s
我已经进行了初始数组设置和工作,下面的 for 循环旨在在输入中的空格处切断字符串并将其复制到新字符串,但它无法正常工作。我是 C 语言新手,也是这个网站的新手。非常感谢任何帮助。
#include <stdio.h>
#include <string.h>
int main(){
char a[50];
char b[50];
char c[50];
char d[50];
char e[50];
char f[50];
int i;
printf("enter a string (Ex: asdf asdf asdf... Must have atleast 2 arguments but no more than six): ");
scanf("%s", a);
printf("%c", a);
for (i = 0; i != 50; i++){
if(a[i]==' '){
char strncpy(b, &a[i], i+2);
printf("\n%c ",a[1]);
printf("%c ",b[0]);
}
}
for (i = 0; i != 50; i++){
if(b[i]==' '){
char strncpy(c, &b[i], i+2);
printf("%c ",c[1]);
}
}
for (i = 0; i != 50; i++){
if(c[i]==' '){
char strncpy(d, &c[i], i+2);
printf("%c ",d[0]);
}
}
for (i = 0; i != 50; i++){
if(d[i]==' '){
char strncpy(e, &d[i], i+2);
printf("%c ",e[1]);
}
}
for (i = 0; i != 50; i++){
if(e[i]==' '){
char strncpy(f, &e[i], i+2);
printf("%c ",f[0]);
}
}
return 0;
}
最佳答案
您不需要从任何地方复制字符串...来自命令行,您将把它们放在argv
中:
int main( int argc, char **argv )
{
}
其中 argc
是参数总数加 1(第一个是调用程序的名称),argv
是指向每个参数字符串的指针数组。这些已经从命令行进行了标记。
所以首先你要测试你是否有足够的论点。我喜欢明确地创建一个新变量来消除比较中的逐一混淆:
int nparams = argc - 1;
if( nparams < 2 || nparams > 6 ) {
printf( "Wrong number of arguments\n" );
return -1;
}
然后你循环你的论点。第一个将位于数组的位置 1...从您的示例来看,您似乎打印了第一个参数的第一个字符和下一个参数的第二个字符,然后继续交替。这是一个模运算。我有一个变量 which
来选择要打印的字符。
int i, which;
for( i = 1; i <= nparams; i++ ) {
which = (i-1) % 2;
printf( "%c\n", argv[i][which] );
}
这确实假设每个第二个参数至少有两个字符长。没有错误检查。如果需要错误检查,则需要确保正在打印的字符不是字符串终止符(值 0)。对于第二个字符,您还需要检查该值是否不为 0。我不知道是否可以指定一个零长度字符串的参数。也许知道的读者可以发表评论。
好吧,我不妨把它放进去......所以你的循环看起来有点像这样:
if( argv[i][0] == 0 || argv[i][which] == 0 ) {
printf( "\n" );
} else {
printf( "%c\n", argv[i][which] );
}
关于c - 在C中使用命令行检测参数,然后打印出参数的第一个或第二个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12486289/