我的输出总是打印“。”在我期望输出之前。 CS50 PSET2
My output always prints '.' before my expect output. CS50 PSET2
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
int main(int argc, string argv[])
{
for (int i = 0; i < argc; i++)
{
printf ("%c", toupper(argv[i][0]));
}
printf ("\n");
}
它应该包含您的全名和 return 您的姓名首字母。它 return 是它应该做的,除了它总是在我的输出之前 return 是一个句点。
您打印 argv
字符串数组的每个元素的第一个字符。第一个元素 argv[0]
是可执行文件的名称。您可能将可执行文件调用为 ./myprogram
,因此首先打印的是 .
。
您应该从条目号 1 开始枚举 argv
。此外,您应该将 char
转换为 (unsigned char)
,因为 toupper()
仅针对所有值定义类型 unsigned char
和特殊值 EOF
,而不是 char
类型的潜在负值,如果它是默认签名的话。
#include <ctype.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
for (int i = 1; i < argc; i++) {
putchar(toupper((unsigned char)argv[i][0])));
}
putchar('\n');
return 0;
}
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
int main(int argc, string argv[])
{
for (int i = 0; i < argc; i++)
{
printf ("%c", toupper(argv[i][0]));
}
printf ("\n");
}
它应该包含您的全名和 return 您的姓名首字母。它 return 是它应该做的,除了它总是在我的输出之前 return 是一个句点。
您打印 argv
字符串数组的每个元素的第一个字符。第一个元素 argv[0]
是可执行文件的名称。您可能将可执行文件调用为 ./myprogram
,因此首先打印的是 .
。
您应该从条目号 1 开始枚举 argv
。此外,您应该将 char
转换为 (unsigned char)
,因为 toupper()
仅针对所有值定义类型 unsigned char
和特殊值 EOF
,而不是 char
类型的潜在负值,如果它是默认签名的话。
#include <ctype.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
for (int i = 1; i < argc; i++) {
putchar(toupper((unsigned char)argv[i][0])));
}
putchar('\n');
return 0;
}