我对以下代码感到困惑,该代码旨在遍历给定的所有字符串参数并仅打印元音。
$gallery_imgs
该程序有效,但仅在调用./ MARIANO ARGUELLO RIVERA时打印我传递的第一个参数
它仅打印自变量MARIANO的结果,而忽略所有其他结果。
到目前为止,我的猜测(并且我仍然盯着屏幕试图寻找解决方案)在第二个循环#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
if (argc == 1){
printf("ERROR: You need one argument.\n");
// this is how you abort your program
return 1;
}
int i = 1;
int j = 0;
printf("Printing number of arguments %d\n", argc);
for (i = 1; i <= argc; i++){
for (j = 0; argv[i][j] != '\0'; j++) {
char letter = argv[i][j];
if(letter >= 'A' && letter <= 'Z'){
letter = letter + 32;
}
switch (letter) {
case 'a':
printf("'A'\n");
break;
case 'e':
printf("'E'\n");
break;
case 'i':
printf("'I'\n");
break;
case 'o':
printf("'O'\n");
break;
case 'u':
printf("'U'\n");
break;
case 'y':
if (i > 2) {
// it's only sometimes Y
printf("'Y'\n");
}
break;
default:
printf("%c is not a vowel\n", letter);
}
}
return 0;
}
}
中,当程序使用第一个参数时,看到空字节,在第一个字符串的末尾,并停止迭代并且不转到第二个字符串进行处理。
我是对的吗?
还是我应该照顾代码中的其他细节,这样迭代才能成功?
谢谢
答案 0 :(得分:-1)
您犯了一个有趣的错误:)
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
if (argc == 1){
printf("ERROR: You need one argument.\n");
// this is how you abort your program
return 1;
}
int i = 1;
int j = 0;
printf("Printing number of arguments %d\n", argc);
for (i = 1; i <= argc; i++){
for (j = 0; argv[i][j] != '\0'; j++) {
char letter = argv[i][j];
if(letter >= 'A' && letter <= 'Z'){
letter = letter + 32;
}
switch (letter) {
case 'a':
printf("'A'\n");
break;
case 'e':
printf("'E'\n");
break;
case 'i':
printf("'I'\n");
break;
case 'o':
printf("'O'\n");
break;
case 'u':
printf("'U'\n");
break;
case 'y':
if (i > 2) {
// it's only sometimes Y
printf("'Y'\n");
}
break;
default:
printf("%c is not a vowel\n", letter);
}
}
}
return 0;
}
我只是做了一个更正。请立即检查。,它现在可以使用:)