用户输入字符串(使用 fgets)中最后一个字符的 ASCII 值输出为 10,而预期值为 0
ASCII value output of the last character in a user input string (using fgets) is 10 while expected value is 0
我正在编写一个程序来模拟 strcmp()。这是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 100
int strcmp(const char *str1, const char *str2);
char s1[MAX], s2[MAX];
int main()
{
printf("Compare two user entered strings character by character.\n");
printf("Enter string one: ");
fgets(s1, MAX, stdin);
printf("Enter string two: ");
fgets(s2, MAX, stdin);
printf("The user entered string one is: %s", s1);
printf("The user entered string two is: %s", s2);
printf("The value returned by strcmp() is: %d", strcmp(s1, s2));
return 0;
}
int strcmp(const char *str1, const char *str2){
int result;
while(*str1 != '[=10=]' && *str1 - *str2 == 0){
str1++;
str2++;
}
if(*str1 - *str2 != '[=10=]'){
printf("%d\n", *str1);
printf("%d\n", *str2);
result = *str1 - *str2;
}else if(*str1 == '[=10=]' && *str2 == '[=10=]'){
result = 0;
}
return result;
}
它在大多数情况下工作正常并且 strcmp() 函数 returns 得到正确的结果,除了当一个字符串终止而另一个字符串剩余字符时。我使用 while 循环比较字符并将指针递增到下一个字符。当一个字符串递增到 '\0' 时,执行 printf 时显示的整数值为 10。为什么不是 0?因为值为10,减去其他字符串的字符得到的结果是大10。
为什么会这样?
函数fgets
可以将换行符'\n'
- 十进制10
(对应回车键)添加到输入的字符串中,如果有足够的话space 在目标字符数组中。
你应该删除它。例如
#include <string.h>
//...
fgets(s1, MAX, stdin);
s1[ strcspn( s1, "\n" ) ] = '[=10=]';
printf("Enter string two: ");
fgets(s2, MAX, stdin);
s2[ strcspn( s2, "\n" ) ] = '[=10=]';
我正在编写一个程序来模拟 strcmp()。这是我的代码。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX 100
int strcmp(const char *str1, const char *str2);
char s1[MAX], s2[MAX];
int main()
{
printf("Compare two user entered strings character by character.\n");
printf("Enter string one: ");
fgets(s1, MAX, stdin);
printf("Enter string two: ");
fgets(s2, MAX, stdin);
printf("The user entered string one is: %s", s1);
printf("The user entered string two is: %s", s2);
printf("The value returned by strcmp() is: %d", strcmp(s1, s2));
return 0;
}
int strcmp(const char *str1, const char *str2){
int result;
while(*str1 != '[=10=]' && *str1 - *str2 == 0){
str1++;
str2++;
}
if(*str1 - *str2 != '[=10=]'){
printf("%d\n", *str1);
printf("%d\n", *str2);
result = *str1 - *str2;
}else if(*str1 == '[=10=]' && *str2 == '[=10=]'){
result = 0;
}
return result;
}
它在大多数情况下工作正常并且 strcmp() 函数 returns 得到正确的结果,除了当一个字符串终止而另一个字符串剩余字符时。我使用 while 循环比较字符并将指针递增到下一个字符。当一个字符串递增到 '\0' 时,执行 printf 时显示的整数值为 10。为什么不是 0?因为值为10,减去其他字符串的字符得到的结果是大10。
为什么会这样?
函数fgets
可以将换行符'\n'
- 十进制10
(对应回车键)添加到输入的字符串中,如果有足够的话space 在目标字符数组中。
你应该删除它。例如
#include <string.h>
//...
fgets(s1, MAX, stdin);
s1[ strcspn( s1, "\n" ) ] = '[=10=]';
printf("Enter string two: ");
fgets(s2, MAX, stdin);
s2[ strcspn( s2, "\n" ) ] = '[=10=]';