为什么结果不打印字符呢


#include<stdio.h>
void chline(char ch, int i, int j);
int main(void) {
    int i,j;
    char ch;
    printf("请输入要打印的字符及行列数:");
    scanf_s("%c,%d,%d", &ch, &i, &j);
    chline(ch, i, j);
}
void chline(char ch, int i, int j) {
    for ( i; i > 0; i--) {
        for (j; j > 0; j--) {
            printf("%c", ch);
        }
    }
}

题主的代码有点问题啊!



#include<stdio.h>

void chline(char ch, int i, int j);

int main(void) {
    int i,j;
    char ch;
    // printf("请输入要打印的字符及行列数:");
    scanf("%c,%d,%d", &ch, &i, &j);
    chline(ch, i, j);
}

void chline(char ch, int i, int j) {
    for (; i > 0; i--) {
        for (int k = 0; k < j; k++) {
            printf("%c", ch);
        }
        printf("\n");
    }
}

img

输入最好不要带逗号

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7649501
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:为什么数组变量不能赋值字符串常量
  • 除此之外, 这篇博客: 电话号码查询中的 时间的冗余, 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 你需要尽量避免使用<vector>,他有可能会使你的代码运行超时:

    #include<iostream>
    #include<string>
    #include<vector>
    #include<sstream>
    using namespace std;
    
    int main(){
        int T;
        cin >>T;
        vector<string> name;
        vector<string> number;
        int counter = 0;
        while(T--){
            string name_, number_;
            cin >> name_ ;
            int a  = name_.find(",",0);
            for(int i=a+1; i < (int)name_.size(); ++ i){
                number_ += name_[i];
            }
            name_.erase(name_.begin()+a,name_.end());
            name.push_back(name_);
            number.push_back(number_);
            ++ counter;
        }
        /*for(int i=0; i < (int)name.size(); ++ i){
            cout << name[i] << endl;
        }
        for(int i=0; i < (int)number.size(); ++ i){
            cout << number[i] << endl;
        }*/
        int q=0;
        cin >>  q;
        while(q--){
            string name_;
            cin >> name_;
            int i = 0;
            int flag = 1;
            while( i < counter){  // size of the vector
                //cout << "name[i]*****" << name[i] << "name_******" << name_ << (name[i] == name_) ;
                if(name[i] == name_){
                    cout << name_ << ":" << number[i] <<endl;
                    flag = 0;
                    break;
                }
                ++ i;
            }
            if(flag){
                cout << name_ << ":" << "No\n" ;
            }
        }
    }
    
    

    下面放出可行的两份答案吧:

    c++   standard answer: 

    #include <iostream>
    #include <map>
    #include <string>
    #include <sstream>
    using namespace std;
    
    int main()
    {
        int len;
        cin >> len;
        map<string, string> m;
        for (int i = 0; i < len; i++){
            string name_, number_;
            string item;
            cin>>item;
            stringstream ss(item);
            getline(ss,name_,',');
            getline(ss,number_,',');
            //m.insert(pair<string,string>(name,phone));
            m[name_] = number_;//这两种插入方式都可以,insert一般用于多值插入情况
        }
        cin >> len;
        for (int i = 0; i < len; i++){
            string name;
            cin >> name;
            if (m.find(name)==m.end())
                cout << name << ":No" << endl;
            else
                cout << name << ":" << m[name] << endl;
        }
        return 0;
    }

    or:

    #include <iostream>
    #include <map>
    #include <string>
    using namespace std;
    
    int main()
    {
        int len;
        cin >> len;
        map<string, string> m;
        for (int i = 0; i < len; i++){
            cin.get();//前面cin后,最后的'\n'还在,需要手动去掉。
            string name;
            getline(cin, name, ',');//以','为分隔符,将姓名提取出来
            string phone;
            cin >> phone;
            //m.insert(pair<string,string>(name,phone));
            m[name] = phone;//这两种插入方式都可以,insert一般用于多值插入情况
        }
        cin >> len;
        for (int i = 0; i < len; i++){
            string name;
            cin >> name;
            if (m.find(name)==m.end())
                cout << name << ":No" << endl;
            else
                cout << name << ":" << m[name] << endl;
        }
        return 0;
    }
    //-----------------------------------------------------------
    /*转载自CSDN博客https://blog.csdn.net/Stark_JC/article/details/82080799?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-1-82080799.pc_agg_new_rank&utm_term=getline%E5%88%86%E9%9A%94%E7%AC%A6&spm=1000.2123.3001.4430*/

     其他博客传送门:C++ 使用 stringstream与getline()分割字符串_Franden的博客-CSDN博客_getline分割字符串

  • 您还可以看一下 千锋老师的什么是云计算? 课程中的 这是我选择云计算的 第三个原因小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    很抱歉,根据提供的参考资料和问题描述,无法得出具体的解决方案。提供更多的信息如代码片段、错误提示等将有助于解决问题。

这么改,供参考:

#include<stdio.h>
void chline(char ch, int i, int j);
int main(void) {
    int i,j;
    char ch;
    printf("请输入要打印的字符及行列数:");
    scanf_s("%c %d %d", &ch, 1, &i, &j); //scanf_s("%c,%d,%d", &ch, &i, &j); 修改
    chline(ch, i, j);
    return 0;
}
void chline(char ch, int i, int j) {
    int  m;      // 修改
    for (i; i > 0; i--) {
        for (m = j; m > 0; m--) { // for (j; j > 0; j--) 修改
            printf("%c", ch);
        }
        printf("\n");//这里缺了换行符 修改
    }
}

函数用的不对,看看C语言scanf_s()函数的用法


    scanf_s("%c,%d,%d", &ch, 1, &i, &j);