【发布时间】:2019-09-26 04:32:54
【问题描述】:
我在 C 语言中有一个作业问题,即接受用户输入的字符(仅来自 a-z 或空格)并返回 ASCII 值。如果只有字符,代码可以正常工作,但是当我尝试输入空格时,它不会返回数字 32。任何帮助都会很棒!
#include <stdio.h>
char buf[128];
int main(int argc, char *argv[]) {
buf[127] = 0;
char *line = argv[1];
int i;
int j;
i = 0;
j = 126;
while((line[i] >= 'a' && line[i] <= 'z') || (line[i] == ' ')){
buf[j] = line[i];
printf("%d", buf[j]);
printf(" ");
i++;
j--;
}
return 0;
}
没有错误消息。例如,如果我输入字符串“hello”,它会返回“104 101 108 108 111”,但如果我输入“hello guy”,它也会返回“104 101 108 108 111”并停在空格字符处。
【问题讨论】:
-
您的程序只使用命令行参数而不是来自
stdin- 这是故意的吗? -
你的程序对我有用 - 除了 shell 不会将单个空格传递给程序,它必须被引用 - 像这样:
./program " " -
@Dai 是的,这是故意的,不幸的是我必须在这个程序中使用命令行参数。
-
@aragaer 说得通。谢谢
-
关于:
char *line = argv[1];在访问argv[0]以外的任何内容之前,请始终检查argc,以确保操作员实际输入了预期的命令行参数。此外,当命令行包含空格时,您的程序会将其视为两个命令行参数(除非您将整个参数包装在“...”中)