我对阵列和打印字符串感到非常困惑。 我的程序中有一个小问题,它不打印字符串,只打印字符。
$app->get('/', function($request, $response, $args){
$this->view->render($response, 'home.twig');
})->setName('home');
因此,当程序运行时,如果随机数等于A,则它可以正常工作,然后打印出A.但是,当数字!=到A时,它会崩溃并且不会打印出BE或CE。这是为什么?我使用过#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
char myarray[] = { 'A', 'A', 'BE', 'CE' };
srand(time(NULL));
char number;
number = myarray[rand() % 4];
if (number == 'A') {
printf("%c", number);
}
else {
printf("%s", number);
}
return 0;
}
,但我实际上看不到我的问题。
答案 0 :(得分:1)
语句printf("%s", number);
在运行时导致未定义的行为,因为%s
要求相应的参数是指向char
的指针,但是您没有提供指向{{1}的指针}。
(任何体面的编译器,明智地操作,都会告诉你这些不匹配的printf参数。)
这可能是你的意思:
char
答案 1 :(得分:1)
崩溃主要是由于这条线:
const char * a[] = { "A", "A", "BE", "BC" };
printf("%s", a[rand() % 4]);
使用不正确的格式说明符。 printf("%s", number);
用于打印c-string。但%s
属于number
。
即使这样,它也可能不会产生您期望的输出,因为char
和BE
是多字节字符常量,具有实现定义的行为。
相反,您可以使用指针数组:
CE
答案 2 :(得分:1)
您使用了int main()
{
ifstream file("text1.txt"); //open file
if(!file) { /* file could not be opened */ } //and check whether it can be used
std::map<std::string, float> com;
std::string lastCom; //last command for use in "Repeat"
std::string line;
while (std::getline(file, line)) //read a line at once until file end
{
if(line.empty()) continue; //and continue if it is empty
std::string tempCom;
float tempVal;
std::stringstream ss(line); //extract command and value
ss >> tempCom;
ss >> tempVal;
if(tempCom == "Repeat")
{
com[lastCom] += tempVal; //add the value to the last command
}
else
{
com[tempCom] += tempVal; //add the value to the current command
lastCom = tempCom; //and update last command
}
}
}
的错误格式说明符。现代编译器会对此发出警告。 printf
必须使用%c
,而不是char
。
字符常量%s
和'BE'
在分配给'CE'
时的行为是实现定义的。它们可能会被截断为char
或其他内容。
您的代码中没有字符串。字符串文字由双引号引入。