你好noob程序员在这里遇到strcmp问题这是我的代码.
while (strcmp("m",wood) !=0 || strcmp("j",wood) !=0 || strcmp("o",wood) !=0){
cout << "(m for mahogany, o for oak, or p for pine): ";
cin >> wood;
}
Run Code Online (Sandbox Code Playgroud)
这是我的错误.
所以我从一个文件中逐个读取字符:
char temp[3];
temp[0] = nextchar;
printf("%c",temp[0]); //prints %
temp[1] = nextchar = fgetc(srcptr);
printf("%c",temp[1]); //prints 2
temp[2] = nextchar = fgetc(srcptr);
printf("%c",temp[2]); //prints 0
if(strcmp(temp, "%20") == 0) { printf("%s","blahblah"); }
Run Code Online (Sandbox Code Playgroud)
理想情况下,这应该在最后打印"blahblah".但事实并非如此.那么为什么strcmp返回0,更重要的是:我该如何修复呢?
从手册页:
所述的strcmp()和STRNCMP()函数返回小于整数,等于或大于零,如果S1(或其前n个字节)被发现,分别为小于,以匹配或大于s2 .
实施例中的代码C(打印-15我的机器上,交换TEST1和TEST2反转值):
#include <stdio.h>
#include <string.h>
int main() {
char* test1 = "hello";
char* test2 = "world";
printf("%d\n", strcmp(test1, test2));
}
Run Code Online (Sandbox Code Playgroud)
我发现这个代码(取自这个问题)依赖于strcmp的值不是-1,0和1(它使用返回值qsort).对我来说,这是一种可怕的风格,取决于无证的功能.
我想我有两个相关的问题:
编辑:
离开我的电脑5分钟后,我意识到问题代码实际上没有错误.在阅读评论/答案之前,我找出了我想出的部分,但是我把它留在那里以保持评论的相关性.我认为这仍然是一个有趣的问题,可能会导致习惯于其他语言的程序员总是返回-1,0或1(例如Python似乎这样做,但是没有记录这种方式).
FWIW,我认为依赖记录行为以外的其他东西是不好的风格.
当我运行程序并回答"是"时,它告诉我我错了.有没有人知道执行此类程序的方法?
#include <string.h>
#include <stdio.h>
int strcmp(const char *str1,const char *str2 );
// I am trying to make a program that asks the user to input an answer
int main()
{
char answer[20];
printf("Can birds fly?\n");
scanf("%s", &answer[20]);
if(strcmp(answer, "yes") == 0)
{
printf("You are right");
}else
{
printf("You are worng");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 如果第一个参数的第一个字符==" - ",则输入if语句.我得到的错误是"传递'strcmp'的参数1使得整数指针没有强制转换"我也用fgetc尝试了这个,写得有点不同,但仍然得到这个错误.如果我施展它,我得到一个核心转储.如果参数包含一个破折号,那么在同一个参数中会跟着数字,所以我不能只将argv [1]看作一个char,如果我可以这么简单:if (strcmp(argv[1], "-")==0)
功能
int main (int argc, const char *argv[]){
const char *test = argv[1];
if (strcmp(test[0],"-")==0)
{
printf("saw there was a dash");
}
return 0;}
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助
我有这行代码
if(strcmp(ob[i].getBrand(), ob[j].getBrand()) > 0)
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
错误C2664:'strcmp':无法将参数1从'std :: string'转换为'const char*'
这是否意味着strcmp不能使用字符串,而是必须将其转换为char?
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int main()
{
string x;
cin>>x;
if(strcmp(&x.at(0), "M") == 0)
{
cout<<"midget ";
}
else if(strcmp(&x.at(0), "J") == 0)
{
cout<<"junior ";
}
else if(strcmp(&x.at(0), "S") == 0)
{
cout<<"senior ";
}
else
{
cout<<"invalid code";
}
if(strcmp(&x.at(1), "B") == 0)
{
cout<<"boys";
}
else
{
cout<<"girls";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我已经使用上面的代码来比较MB应该返回"侏儒男孩",但它继续下降到其他并返回"无效的codeboys".不知何故第二个条件正常.我的诊断告诉我,在第一次比较它返回66.我猜这是"M"的ASCII代码.但是我现在如何解决我的问题呢?
我正在尝试编写一个程序,它将采用两组字符串N和Q.该程序的目标是打印出Q中每个字符串出现在N中的次数.但是,我正在努力管理字符串和指针C,特别是我认为我的问题源于尝试拥有一个字符串数组.执行下面的代码时,我遇到了分段错误.我已经注释了我使用printf()进行调试的尝试.我相信当我尝试将S分配到N_array时会出现问题.
int main() {
int N, Q;
char *N_array[1000], *Q_array[1000];
scanf("%d", &N);
for (int N_i = 0; N_i < N; N_i++) {
//printf("made it through A for loop %d times\n", N_i+1);
scanf("%s", N_array[N_i]);
}
scanf("%d", &Q);
//Does the array contain any information?
//for (int N_i = 0; N_i < N; N_i++) { printf("N_array[%d] == %d\n", N_i, N_array[N_i]);}
for (int Q_i = 0; Q_i < Q; Q_i++) {
//printf("Made it to B for loop\n");
int occurs = 0, result;
char s[21]; …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的函数来将表示位串的3字符串转换为十进制数:
int bin3_to_dec(char *bin) {
int result;
result=0;
printf("string: %s\n", bin);
printf("c0: %c\n", bin[0]);
printf("c1: %c\n", bin[1]);
printf("c2: %c\n", bin[2]);
if ((strcmp(&bin[0], "1") == 0))
result += 4;
if ((strcmp(&bin[1], "1") == 0))
result += 2;
if ((strcmp(&bin[2], "1") == 0))
result += 1;
printf("result: %d\n", result);
return result;
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序并为此函数提供111它应该计算的字符串时7.而不是它输出:
string: 111
c0: 1
c1: 1
c2: 1
result: 1
Run Code Online (Sandbox Code Playgroud)
为什么不计算正确的值?为什么只有第三个条件顺利通过?
我有以下代码:
#include <stdio.h>
#include <stdlib.h>
char values[] = {"abcde"};
int main(int argc, char *argv[])
{
printf("%d\n", strcmp(&values[0], argv[1]));
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
我以这种方式编译和启动:
$ gcc main.c -o main
$ ./main a
98
Run Code Online (Sandbox Code Playgroud)
的结果strcmp是 98,所以值不一样。当我替换&values[0]通过"a"在代码中,我看到,他们是相同的(strcmp输出等于0)。
那么有没有办法values[0]作为字符串访问?我想我需要\0在最后以某种方式指定,以便将字符用作字符串,但我找不到方法。