我在比较if
子句中的char和“some text”时遇到问题。
有代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *start[99];
printf("Welcome to MyOS 1");
printf("\n" "#: ");
scanf("%[98]", &start);
if (&start == "help")
{
printf("All commands:" "File" "Calculator");
}
}
答案 0 :(得分:2)
start
是一个指向char的指针数组,你可能需要一个char数组。所以改变
char *start[99];
到
char start[99];
并将scanf("%[98]", &start);
更改为scanf("%[98]", start);
要比较c字符串,请使用strcmp()
。所以改变
if (&start == "help")
到
if ( strcmp(start, "help") == 0 )
如果您想阅读行,请使用fgets()
代替scanf()
。
启用编译器警告也会有所帮助。对于您的代码,GCC问题:
警告:格式'%[98'需要类型'char *'的参数,但是参数 2的类型为'char *(*)[99]'[ - Wformat =]
警告:不同指针类型的比较缺少强制转换
警告:与字符串文字的比较结果未指定 行为[-Waddress]
答案 1 :(得分:0)
您的代码存在一些问题。你可能想要一个char数组,char start [99]。您应该使用strcmp或strncmp来比较字符串。只需使代码工作就可以这样做:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{
char start[99];
printf("Welcome to MyOS 1");
printf("\n" "#: ");
fgets(start, sizeof(start), stdin);
if (isalpha((unsigned char) *start) != 0)
{
if (strncmp(start, "help", 4) == 0)
printf("All commands: File Calculator\n");
else
printf("No such command.\n");
}
else
fprintf(stderr, "Error\n");
}