我需要编写从用户那里获取Input
的程序,以防万一我有quate
("
),我需要将chars
内部的所有quotes
更改为uppercase
。
int main()
{
int quoteflag = 0;
int ch = 0;
int i = 0;
char str[127] = { '\0' };
while ((ch = getchar()) != EOF && !isdigit(ch))
{
++i;
if (ch == '"')
quoteflag = !quoteflag;
if (quoteflag == 0)
str[i] = tolower(ch);
else
{
strncat(str, &ch, 1);
while ((ch = getchar()) != '\"')
{
char c = toupper(ch);
strncat(str, &c, 1);
}
strncat(str, &ch, 1);
quoteflag = !quoteflag;
}
if (ch == '.')
{
strncat(str, &ch, 1);
addnewline(str);
addnewline(str);
}
else
{
if ((isupper(ch) && !quoteflag))
{
char c = tolower(ch);
strncat(str, &c, 1);
}
}
}
printf("\n-----------------------------");
printf("\nYour output:\n%s", str);
getchar();
return 1;
}
void addnewline(char *c)
{
char tmp[1] = { '\n' };
strncat(c, tmp, 1);
}
所以我的问题是,如果我的输入是
"a"
此打印位于"A
末尾而不是"A"
,而我不知道为什么 最佳答案
问题是您使用怪异方式使用strncat
。首先,strncat
在big-endian系统上总是不起作用。 strncat
的作用是将输入...读取为字符串。因此,将int
(四个或八个字节)传递给函数,它将读取第一个字节。如果第一个字节是0
,则它将认为它是字符串的结尾,并且不会在str中添加任何内容。在小字节序系统上,第一个字节应该是您想要的char
,但是在大字节序系统上,它将是高字节(对于int
值小于255的字节,始终为零)。您可以read more about endianness here。
不过,我不知道为什么要使用strncat
附加单个字符。您对str[i] = tolower(ch)
有正确的想法。我将int ch
更改为char ch
,然后在代码中将strncat(...)
替换为str[i++] = ...
,它编译良好并返回了所需的"A"
输出。源代码如下。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int quoteflag = 0;
char ch = 0;
int i = 0;
char str[127] = { '\0' };
while ((ch = getchar()) != EOF && !isdigit(ch))
{
if (ch == '"')
quoteflag = !quoteflag;
if (quoteflag == 0)
str[i++] = tolower(ch);
else
{
str[i++] = ch;
while ((ch = getchar()) != '\"')
{
char c = toupper(ch);
str[i++] = c;
}
str[i++] = ch;
quoteflag = !quoteflag;
}
if (ch == '.')
{
str[i++] = '.';
str[i++] = '\n';
str[i++] = '\n';
}
else
{
if ((isupper(ch) && !quoteflag))
{
char c = tolower(ch);
str[i++] = c;
}
}
}
printf("\n-----------------------------");
printf("\nYour output:\n%s", str);
getchar();
return 1;
}
关于c - C语言:更改用户输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47081305/